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);
  • 相关阅读:
    BZOJ 4511 洛谷3131 USACO 16.Jan 七子共
    Atcoder Code Festival 2017 qual C 10.22 D题题解
    hdu 5122(2014ACM/ICPC亚洲区北京站) K题 K.Bro Sorting
    HDU 5115 (2014ACM/ICPC亚洲区北京站) D题(Dire Wolf)
    POJ
    hihocoder 1032 最长回文子串(Manacher)
    hihocoder 1015 KMP算法
    Trie树 hihocoder 1014
    POJ 3468 线段树区间修改查询(Java,c++实现)
    atCoder Ants on a Circle(又是蚂蚁问题。。。)
  • 原文地址:https://www.cnblogs.com/lnice/p/7058522.html
Copyright © 2011-2022 走看看