zoukankan      html  css  js  c++  java
  • 设计模式学习笔记抽象工厂模式

    概述:                                                                                                         

    抽象工厂(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();
    }
    }

      

    小结:                                                                                                          

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

  • 相关阅读:
    20175311 2018-2019-2 《Java程序设计》第7周学习总结
    20175311胡济栋 2018-2019-2《Java程序设计》结对编程项目-四则运算 第一周 阶段性总结
    20175314 《信息安全系统设计基础》课程总结
    USCOSII
    改进ls的实现
    cat userlist
    实现ls
    stat命令的实现-mysate
    实现mypwd
    2019-2020-1 20175314_20175316 实验五 通讯协议设计
  • 原文地址:https://www.cnblogs.com/jqbird/p/2152990.html
Copyright © 2011-2022 走看看