抽象工厂的定义
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
场景案例
抽象工厂的应用场景案例说明,如下图所示,我们要实现不同品牌的手机的创建,opp手机对象是一个抽象对象,它的实现类有两个一个是低配版的oppo手机,一个是高配版的oppo手机。vivo手机对象也是一个抽象对象,它的实现类也有低配版vivo手机和高配版vivo手机。然后还需要一个抽象工厂,而抽象工厂的两个子类一个是低配版手机工厂专门负责生产低配置的各个品牌的手机,一个是高配版手机工厂专门用来生产高配置的各个品牌的手机工厂。
代码实现
使用抽象工厂模式实现不同配置的不同品牌手机的创建操作的流程图如下图所示:
Oppo.java
public interface Oppo {/*** oppo手机拍照功能* @date /11/7 9:48*/void photograph();}
LowOppo.java
public class LowOppo implements Oppo {@Overridepublic void photograph() {System.out.println("低配版oppo手机拍照中。。。400像素");}}
HighOppo.java
public class HighOppo implements Oppo {@Overridepublic void photograph() {System.out.println("高配版oppo手机拍照中。。。1200像素");}}
Vivo.java
public interface Vivo {/*** 拍照功能* @date /11/7 9:46*/void photograph();}
LowVivo.java
public class LowVivo implements Vivo {@Overridepublic void photograph() {System.out.println("低配版vivo拍照中。。。。像素500");}}
HighVivo.java
public class HighVivo implements Vivo {@Overridepublic void photograph() {System.out.println("高配版vivo拍照中。。。。像素1000");}}
IPhoneFactory.java
interface IPhoneFactory {/*** 生产vivo手机* @return Vivo* @date /11/7 9:51*/Vivo createVivo();/*** 生产oppo手机* @return Oppo* @date /11/7 9:51*/Oppo createOppo();}
LowPhoneFactory.java
public class LowPhoneFactory implements IPhoneFactory {@Overridepublic Vivo createVivo() {return new LowVivo();}@Overridepublic Oppo createOppo() {return new LowOppo();}}
HighPhoneFactory.java
public class HighPhoneFactory implements IPhoneFactory {@Overridepublic Vivo createVivo() {return new HighVivo();}@Overridepublic Oppo createOppo() {return new HighOppo();}}
Client.java
public class Client {public static void main(String[] args) {// 创建低配版工厂IPhoneFactory lowPhoneFactory = new LowPhoneFactory();Oppo lowOppo = lowPhoneFactory.createOppo();Vivo lowVivo = lowPhoneFactory.createVivo();// 创建高配置工厂IPhoneFactory highPhoneFactory = new HighPhoneFactory();Oppo highOppo = highPhoneFactory.createOppo();Vivo highVivo = highPhoneFactory.createVivo();// 执行各个手机的拍照功能lowOppo.photograph();lowVivo.photograph();highOppo.photograph();highVivo.photograph();}}
运行结果
低配版oppo手机拍照中。。。400像素低配版vivo拍照中。。。。像素500高配版oppo手机拍照中。。。1200像素高配版vivo拍照中。。。。像素1000