一、相关定义
抽象工厂: 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
产品族: 一个品牌下面的所有产品;例如TCL下面的电视、空调、冰箱称为TCL的产品族;
产品等级:多个品牌下面的同种产品;例如海信和TCL下面的电视称为一个产品等级
二、实例分析
现有电器产品厂商基于TCL和Hisense生产不同类型的电视和冰箱,用抽象工厂模式描述该场景。
问题分析:
TCL包括TCLTV、TCLRef;Hisense包括HisenseTV、HisenseRef;由一个超级工厂接口、两个产品接口(TV、Ref),实现两个工厂类(TCL、Hisense),实现四个产品
三、类图
四、java实现
1、超级工厂接口
public interface interfaceFactory {//抽象工厂public TV createTV();public Ref createRef();}
2、Hisense工厂
public class HisenseFactory implements interfaceFactory {public TV createTV() {return new HisenseTV();}public Ref createRef() {return new HisenseRef();}}
3、TCL工厂
public class TCLFactory implements interfaceFactory {public TV createTV() {return new TCLTV();}public Ref createRef() {return new TCLRef();}}
4、TV接口
public interface TV {public void TVRun();}
5、HisenseTV
public class HisenseTV implements TV {@Overridepublic void TVRun() {System.out.println("Hisense TV run!");}}
6、TCLTV
public class TCLTV implements TV {@Overridepublic void TVRun() {System.out.println("TCL TV run!");}}
7、Ref接口
public interface Ref {public void RefRun();}
8、HisenseRef
public class HisenseRef implements Ref {@Overridepublic void RefRun() {System.out.println("Hisense Ref run!");}}
9、TCLRef
public class TCLRef implements Ref {@Overridepublic void RefRun() {System.out.println("TCL Ref run!");}}
五、优缺点分析
优点
产品等级的扩展比较简单,例如增加一个格力工厂生产这两种产品;更加适用于一个产品族中的多个对象被设计成一起工作,它能保证客户端始终只使用同一个产品族中的对象(将一个系列的产品统一一起创建)。同时保证了客户端不知道工厂具体生产的产品。
缺点
产品族扩展非常困难,例如增加一个手机产品,既要修改工厂抽象类里加代码,又修改具体的实现类里面加代码,破坏了开闭原则;增加了系统的抽象性和理解难度;
参考博客:/qq_33732195/article/details/110101808
如果觉得《设计模式—抽象工厂模式(java实现示例)》对你有帮助,请点赞、收藏,并留下你的观点哦!