Abstract Factory(抽象工厂模式)
来源:互联网 发布:卷皮和淘宝质量哪个好 编辑:程序博客网 时间:2024/06/08 13:44
Abstract Factory(抽象工厂模式)
概述
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。 该超级工厂又称为其他工厂的工厂。 这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。 每个生成的工厂都能按照工厂模式提供对象。
使用
示例
Factory(工厂模式)
在上一篇中我们成功的采购了辣条,并且卖的特别火爆。 随着生意的火爆我们需要采购更多种类的辣条,但是每次采购都很痛苦,都得提供种类的名称,比如: kiss,big 等。 于是跟厂家商量你们这的辣条种类太多了,每次采购都很麻烦,有没有简单方式来方便我们采购? 厂家一听,确实太麻烦了,就让他们的销售经理 Provider 来帮助我们采购。
实现
- 首先创建一个辣条类
public interface HotStrip { void info();//用于输出辣条信息}
- 然后实现不同种类的辣条
- 实现大面筋辣条
public class BigHotStrip implements HotStrip { @Override public void info() { System.out.println("这是大面筋!"); }}
- 实现亲嘴烧辣条
public class KissHotStrip implements HotStrip{ @Override public void info() { System.out.println("这是亲嘴烧!"); }}
- 然后创建销售经理负责提供辣条
public interface Provider { HotStrip produce();}
- 分别实现销售经理负责种类的辣条生产
public class BigFactory implements Provider { @Override public HotStrip produce() { return new BigHotStrip(); }}
public class KissFactory implements Provider { @Override public HotStrip produce() { return new KissHotStrip(); }}
- 最后模拟采购流程
public class FactoryTest { @Test public void testHotStrip() { HotStripFactory factory = new HotStripFactory(); HotStrip hotStrip = factory.produce("kiss");//需要亲嘴烧时传入kiss// hotStrip = factory.produce("big");//需要大面筋时传入big hotStrip.info(); } @Test public void testAbstractHotStrip() {//抽象工厂方式 Provider provider = new BigFactory();//辣条的种类交给Provider提供,调用者不需要关心辣条的种类了// provider = new KissFactory(); HotStrip hotStrip = provider.produce(); hotStrip.info(); }}
可以看出客户并不知道 Provider 是怎么提供的辣条,也不需要再传入参数了。
使用场景
QQ 换皮肤,一整套一起换。
优点
- 抽象工厂模式隔离了具体类的生成,使得客户并不需要知道什么被创建。 由于这种隔离,更换一个具体工厂就变得相对容易,所有的具体工厂都实现了抽象工厂中定义的那些公共接口,因此只需改变具体工厂的实例,就可以在某种程度上改变整个软件系统的行为。
- 当一个产品工厂中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品工厂中的对象。
- 增加新的产品工厂很方便,无须修改已有系统,符合“开闭原则”。
缺点
增加新的产品等级结构麻烦(比如:增加方便面种类产品),需要对原有系统进行较大的修改,甚至需要修改抽象层代码,这显然会带来较大的不便,违背了“开闭原则”。
更多文章:
https://github.com/jeanboydev/Android-ReadTheFuckingSourceCode
0 0
- 抽象工厂(Abstract Factory)模式
- 抽象工厂模式(Abstract Factory)
- 抽象工厂(Abstract Factory)模式
- 抽象工厂模式(Abstract Factory)
- 抽象工厂模式(Abstract Factory)
- 抽象工厂模式(Abstract Factory)
- 2--抽象工厂模式(Abstract Factory)
- 抽象工厂模式(abstract factory pattern)
- 抽象工厂模式(Abstract Factory Pattern)
- 抽象工厂模式(Abstract Factory)
- 抽象工厂模式(Abstract Factory)
- 抽象工厂模式(Abstract Factory)
- 抽象工厂模式(Abstract Factory)
- 抽象工厂模式(Abstract Factory)
- 抽象工厂模式(Abstract Factory)
- 抽象工厂模式(Abstract Factory)
- 抽象工厂模式(Abstract Factory)
- 抽象工厂模式(Abstract Factory)
- docker export和save的异同
- 代理有风险 设置需注意
- JS-Table动态增加删除行
- Docker战略结盟Rancher,提供企业级落地技术支持
- C#高效绘图(转)
- Abstract Factory(抽象工厂模式)
- android Sqlite expert中使用SQL 语句插入两条记录
- 在Linux下如何运行.sh文件
- [精]Oracle数据库日常维护命令
- bzoj 4353: Play with tree (树链剖分)
- Longest Common Prefix
- 在CentOS上搭建PHP服务器环境
- Mysql自动备份脚本
- Hibernate安装Hibernate tools