概述
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
最后
以上就是体贴火为你收集整理的Abstract Factory(抽象工厂模式)Abstract Factory(抽象工厂模式)的全部内容,希望文章能够帮你解决Abstract Factory(抽象工厂模式)Abstract Factory(抽象工厂模式)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复