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

      

    小结:                                                                                                          

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

  • 相关阅读:
    FreeCAD框架解析
    Python源码的编译与加密
    centos 8及以上安装mysql 8.0
    浮点数运算丢失精度
    使用 Nginx 代理内网 GitLab 并确保 SSH / HTTP 克隆地址正确
    如何实现一个简易版的 Spring
    Spring 是如何造出一个 Bean 的
    从CPU缓存看缓存的套路
    Java 集合类 List 的那些坑
    react 项目中使用antd框架,对导航多层渲染
  • 原文地址:https://www.cnblogs.com/jqbird/p/2152990.html
Copyright © 2011-2022 走看看