博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式-抽象工厂模式
阅读量:6694 次
发布时间:2019-06-25

本文共 2161 字,大约阅读时间需要 7 分钟。

紧接着工厂方法模式的案例[]

当需要新增一个产品,比如新增一个Department对象时,工厂方法模式就需要修改
结构如下
309352-20170820133300521-331340853.png

此时,需要新增一个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对象时,就需要用到抽象工厂模式
也就是抽象工厂模式是对工厂方法模式的扩展

抽象工厂模式

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

抽象工厂优缺点

优点:只需要改变具体工厂即可使用不同的产品配置

缺点:增加产品系列时,需要同时改动每个具体工厂

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

转载于:https://www.cnblogs.com/adzhouyang/p/7399739.html

你可能感兴趣的文章
Python文件指针与Python函数
查看>>
ORM系列之Entity FrameWork详解
查看>>
[转] java Class类
查看>>
编码转换
查看>>
MVC报错的坑
查看>>
那些争议最大的编程观点
查看>>
极简科普 1:什么是 VOIP
查看>>
11.10 (下午)开课二个月零六天(ajax验证用户名,ajax调数据库)
查看>>
PXC 避免加入集群时发生SST
查看>>
JS基础语法
查看>>
python 的一些tip 02
查看>>
int转字符串 stringstream
查看>>
pip升级时报错--- No module named 'pip._internal'
查看>>
大白话搞懂什么是同步/异步/阻塞/非阻塞
查看>>
Fiddler抓包工具总结二(转自小坦克)
查看>>
JSP----动态网页开发的基础
查看>>
CentOS 6.5下部署日志服务器 Rsyslog+LogAnalyzer+MySQL
查看>>
LoadRunner使用之变量参数化
查看>>
asp.net运行原理
查看>>
canvas实现芝麻信用评分效果
查看>>