创建模式——抽象工厂模式
视频链接:https://www.bilibili.com/video/BV1J741127y6
1.概念
1.1定义
抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,无须指定它们具体的类。它起源于以前对不同操作系统的图形化解决方案,如不同操作系统中的按钮和文本框控件其实现不同,展示效果也不一样,对于每一个操作系统,其本身就构成一个产品类,而按钮和文本框控件也构成一个产品类,两种产品类两种变化,各自有自己的特性。
1.2产品等级结构
产品的等级结构就是产品的继承结构。
1.3产品族
产品族是指同一个工厂生产的,位于不同产品等级结构中的一组结构。
2.结构与实现
2.1结构
抽象工厂模式包含以下四个角色:抽象工厂类(AbstractFactory)、具体工厂类(ConcreteFactory)、抽象产品类(AbstractProduct)、具体产品类(ConcreteProduct);下面用一个实例来展示抽象工厂模式的类图。
假设一个微型计算机配件生产,这个的产品族有两个,一个是PC,一个是MAC。产品等级也有两个,一个是RAM,一个是CPU。类图如下:
从图中可以看出,欸一个工厂角色都要提供两个工厂方法,分别对应于两个不同的抽象产品。有多少抽象产品,就会有多少的工厂方法。
2.2实现
public interface ComputerProducer { public Cpu CreatCpu(); public Ram CreatRam(); } public interface Ram { //...... } public interface Cpu { //...... } public class PcProducer implements ComputerProducer{ @Override public Cpu CreatCpu() { Cpu pcC = new PcCpu(); return pcC; } @Override public Ram CreatRam() { Ram pcR = new PcRam(); return pcR; } } public class PcCpu implements Cpu { //...... } public class PcRam implements Ram { //...... } public class MacProducer implements ComputerProducer{ @Override public Cpu CreatCpu() { Cpu macC = new MacCpu(); return macC; } @Override public Ram CreatRam() { Ram macR = new MacRam(); return null; } } public class MacRam implements Ram{ //...... } public class MacCpu implements Cpu { //...... }
3.优点与缺点
3.1优点
抽象工厂模式隔离了具体类的生成,使得客户端并不需要知道什么被创建,并且当一个产品族中多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象,而且增加新的产品族很方便,无需修改已有系统,符合开闭原则。
3.2缺点
但是在增加新的产品等级结构的时候很麻烦,需要对原有系统进行较大的修改,甚至需要修改抽象层代码,这显然会带来较大的不变,违背了开闭原则。
参考链接:https://www.jianshu.com/p/7a56b7bafbb9
http://www.imooc.com/article/260108?block_id=tuijian_wz

浙公网安备 33010602011771号