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();
    }
    }

      

    小结:                                                                                                          

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

  • 相关阅读:
    SQL server 2008 建立新用户
    2021.3.22-刷题 (移位)
    2021.3.17刷题-分割回文串
    2021.3.16 刷题--组合总和||(一种组合下元素不可重复选取)
    2021.3.15刷题-组合总和(元素可重复选取)
    2021.3.14刷题-设计哈希映射
    2021.3.13刷题-用拉链法设计哈希集合
    2021.3.12刷题-验证二叉树的前序序列化
    2021.3.11刷题-(删除二叉搜索树中的节点)
    2021.2.28刷题 回溯-电话字母组合
  • 原文地址:https://www.cnblogs.com/jqbird/p/2152990.html
Copyright © 2011-2022 走看看