• 设计模式学习笔记抽象工厂模式


    概述:                                                                                                         

    抽象工厂(abstractFactory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们的具体类

    适用场合:

    1.一个系统要独立于它的产品的创建、组合和表示时。

    2.一个系统要由多个产品系列中的一个来配置时。

    3.当你强调一系列相关的产品对象的设计以便进行联合使用时。

    4.当你提供一个产品类库,而只想显示他们的接口而不是实现时。

    类图:                                                                                                       

    示例代码:                                                                                                  

    这里列举出当前比较简单的数据库访问层的代码结构,通过反射来实现,没有用单纯的抽象工厂模式

    ///<summary>
    /// 访问接口
    ///</summary>
    publicinterface IUser
    {
    void AddUser();
    }
    ///<summary>
    /// 数据访问层的工厂配置
    ///</summary>
    class DataAccess
    {
    ///<summary>
    /// 程序集路径 一般通过配置文件来读取
    ///</summary>
    privatestaticstring path ="Jqpress.Data";
    ///<summary>
    /// 数据库类型 一般通过配置文件来读取
    ///</summary>
    privatestaticstring dbtype ="Sqlserver";

    privatestaticobject lockObject =newobject();

    privatestatic IUser _user =null;
    ///<summary>
    /// 通过反射实例化user
    ///</summary>
    ///<returns></returns>
    publicstatic IUser InstanceUser()
    {
    string className = path+"." + dbtype +".User";
    return CreateInstance<IUser>(_user,className);
    }
    ///<summary>
    /// 通过单例 实例化反射
    ///</summary>
    ///<typeparam name="T"></typeparam>
    ///<param name="path"></param>
    ///<param name="className"></param>
    ///<returns></returns>
    privatestatic T CreateInstance<T>(T _instance,string className)
    {
    if (_instance==null)
    {
    lock (lockObject)
    {
    if(_instance==null)
    {
    _instance
    = (T)Assembly.Load(path).CreateInstance(className);
    }
    }

    }
    return _instance;
    }
    }
    ///<summary>
    /// 实现IUser接口
    ///</summary>
    class UserData:IUser
    {
    publicvoid AddUser() { }
    }
    ///<summary>
    /// 业务层调用
    ///</summary>
    class Service
    {
    static IUser dao = DataAccess.InstanceUser();
    publicvoid AddUser()
    {
    dao.AddUser();
    }
    }

      

    小结:                                                                                                          

    抽象工厂模式在设计底层数据库访问代码的时候用到的比较多,但是一般情况下都是通过反射来实现

  • 相关阅读:
    面向对象
    PIL库学习及运用
    Jieba库使用和好玩的词云
    Python汉诺塔问题
    用python计算圆周率PI
    使用python画一只佩奇
    面向对象与正则表达式的学习
    美白,磨皮,搞笑图片处理
    tuetle制作汉诺塔
    python圆周率的计算及进度条提示
  • 原文地址:https://www.cnblogs.com/jqbird/p/2152990.html
Copyright © 2020-2023  润新知