zoukankan      html  css  js  c++  java
  • 设计模式-抽象工厂模式

    紧接着工厂方法模式的案例[http://www.cnblogs.com/adzhouyang/p/7398000.html]
    当需要新增一个产品,比如新增一个Department对象时,工厂方法模式就需要修改
    结构如下

    此时,需要新增一个Department接口,以及分别用两种数据库访问方式实现的具体Department对象,在抽象工厂类和具体工厂类里,也需要新增相关的产生Department对象方法。

    interface IDepartment
        {
            void Insert(Department department);
    
            Department GetDepartment(int id);
        }
    
    public class AccessDepartment : IDepartment
        {
    		public void Insert(Department department)
    		{
    			Console.WriteLine("InsertAccessDepartment");
    		}
    
    		public Department GetDepartment(int id)
    		{
    			Console.WriteLine("AccessDepartmentlist");
    			return null;
    		}
        }
    
    public class SqlDepartment : IDepartment
        {
            public void Insert(Department department)
            {
                Console.WriteLine("InsertSqlDepartment");
            }
    
            public Department GetDepartment(int id)
            {
                Console.WriteLine("SqlDepartmentlist");
                return null;
            }
    
        }
    
    interface IFactory
        {
            IUser CreateUser();
            //新增方法
            IDepartment CreateDepartment();
        }
    
    public class SqlFactory : IFactory
        {
            public IUser CreateUser()
            {
                return new SqlUser();
            }
    
            public IDepartment CreateDepartment()
            {
                return new SqlDepartment();
            }
        }
    
    public class AccessFactory : IFactory
        {
    		public IUser CreateUser()
    		{
                return new AccessUser();
    		}
    
            public IDepartment CreateDepartment()
            {
                return new AccessDepartment();
            }
        }
    
    public static void Main(string[] args)
            {
                User user = new User();
                Department dep = new Department();
    
                IFactory factory = new AccessFactory();
    
                IUser iu = factory.CreateUser();
    
                iu.Insert(user);
                iu.GetUser(1);
    
                IDepartment ip = factory.CreateDepartment();
    
                ip.Insert(dep);
                ip.GetDepartment(1);
            }
    

    只有一个产品系列的时候,比如案例中只有一个User对象的时候,只需要用到工厂方法模式
    当解决涉及到多个产品系列的问题,比如案例中增加了Department对象时,就需要用到抽象工厂模式
    也就是抽象工厂模式是对工厂方法模式的扩展

    抽象工厂模式

    提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

    抽象工厂优缺点

    优点:只需要改变具体工厂即可使用不同的产品配置
    缺点:增加产品系列时,需要同时改动每个具体工厂

    本文根据《大话设计模式》整理得出

  • 相关阅读:
    证明一下拉普拉斯的《概率分析论》观点
    Android实现小圆点显示未读功能
    命名 —— 函数的命名
    node.js 之爬虫
    ubuntu安装 tensorflow GPU
    古文(诗词文)—— 结构模式与复用
    Win10安装Ubuntu16.04 双系统
    python使用wget下载网络文件
    文字检测与识别资源
    10大深度学习架构:计算机视觉优秀从业者必备
  • 原文地址:https://www.cnblogs.com/adzhouyang/p/7399739.html
Copyright © 2011-2022 走看看