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);
  • 相关阅读:
    Spring ApplicationContext 是如何被注入的
    Spring @Controller和@RestController的区别?
    怎样查看 spring IoC 容器有哪些 bean
    YYKit持续补丁 brave
    iOS如何实现多代理模式OC brave
    iOS 之获取IP地址 以及 判断个人热点是否开启 brave
    CGContext 和 CIContext brave
    android 调用微信QQ的其他应用打开列表中添加自己的应用,并且获取uri brave
    CGContext图形上下文详解 brave
    iOS scrollView如何居中缩放 brave
  • 原文地址:https://www.cnblogs.com/lnice/p/7058522.html
Copyright © 2011-2022 走看看