zoukankan      html  css  js  c++  java
  • C# 抽象工厂模式

    抽想工厂类创建方法,以下是一个多年前写的例子

    1,提供一个供外部访问的属性

    2,构造函数初始化该属性

    3,创建子类工厂需要继承实现的业务类的属性

     public abstract class BLLFactory
     {
            public static BLLFactory Instance { get; private set; }
            static BLLFactory()
            {
                string typeName = ConfigurationManager.AppSettings["BLL"];//配置文件中BLL的值为HomeFactory
                Type t = Type.GetType(typeName, true, true);
                object obj = Activator.CreateInstance(t);
                Instance = (BLLFactory)obj;
            }
            //用户管理模块业务的接口
            public abstract IUserBLL UserBLL { get; }
    
            //其他模块业务的接口
            public abstract IOtherBLL OtherBLL { get; }
    
          //....
    }

    4,IUserBLL 接口实现

        public interface IUserBLL
        {
            /// <summary>
            /// 账号注册
            /// </summary>
            /// <param name="user">用户基本信息</param>
            /// <returns>注册是否成功</returns>
            bool Register(UserDTO user);
    
            /// <summary>
            /// 账号登陆
            /// </summary>
            /// <param name="user">账号/密码</param>
            /// <param name="ds">用户基本信息</param>
            /// <returns>登录是否成功</returns>        
            bool Login(UserDTO user, ref DataTable dt);
        }

    5,子类工厂 HomeFactory 实现

     public class HomeFactory : BLLFactory
     {
            public override IUserBLL UserBLL
            {
                get 
                { 
                    return new UserBLL(); 
                }
            }
            public override IOtherBLL OtherBLL
            {
                get 
                { 
                    return new OtherBLL(); 
                }
            }
            //...
       }

    6,UserBLL实现IUserBLL接口方法

        public class UserBLL:IUserBLL
        {
            #region IUserBLL 成员
    
            bool IUserBLL.Register(UserDTO user)
            {
                 //代码实现逻辑
            }
    
            bool IUserBLL.Login(UserDTO user, ref DataTable dt)
            {
                 //代码实现逻辑
            }
    
            #endregion
        }

    7,IOtherBLL,OtherBLL可参考上面的 IUserBLL,UserBLL实现

    这样实现的意义在于,可根据配置文件的设置灵活使用不同的BLLFactory实现工厂,就像是A工厂和B工厂他们都生产自行车,但A工厂和B工厂使用的配件和组装方法不一样

    而我们的业务逻辑可能是A工厂使用sqlserver数据库,而B工厂使用Oracle数据库,但是都能实现获取业务数据的需求

    8,调用方法

    bool isOK = BLLFactory.Instance.UserDLL.Register(userDTO);
  • 相关阅读:
    【springboot】 springboot整合quartz实现定时任务
    Map集合的四种遍历方式
    WCF自引用和循环引用导致的序列化问题
    c#反射
    小助手配置文件列表页
    WPF数据绑定(ItemTemplate和DataTemplate)
    TankMapData
    手机qq协议做的第三方qq软件
    WPF MVVM模式学习
    小助手(应用盒子之我的实现思路及示例程序)
  • 原文地址:https://www.cnblogs.com/lnice/p/7058522.html
Copyright © 2011-2022 走看看