一、相关定义
抽象工厂: 抽象工厂模式(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 {
@Override
public void TVRun() {
System.out.println("Hisense TV run!");
}
}
6、TCLTV
public class TCLTV implements TV {
@Override
public void TVRun() {
System.out.println("TCL TV run!");
}
}
7、Ref接口
public interface Ref {
public void RefRun();
}
8、HisenseRef
public class HisenseRef implements Ref {
@Override
public void RefRun() { System.out.println("Hisense Ref run!");
}
}
9、TCLRef
public class TCLRef implements Ref {
@Override
public void RefRun() {
System.out.println("TCL Ref run!");
}
}
五、优缺点分析
优点
产品等级的扩展比较简单,例如增加一个格力工厂生产这两种产品;更加适用于一个产品族中的多个对象被设计成一起工作,它能保证客户端始终只使用同一个产品族中的对象(将一个系列的产品统一一起创建)。同时保证了客户端不知道工厂具体生产的产品。
缺点
产品族扩展非常困难,例如增加一个手机产品,既要修改工厂抽象类里加代码,又修改具体的实现类里面加代码,破坏了开闭原则;增加了系统的抽象性和理解难度;
参考博客:https://blog.csdn.net/qq_33732195/article/details/110101808