抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
场景案例抽象工厂的应用场景案例说明,如下图所示,我们要实现不同品牌的手机的创建,opp手机对象是一个抽象对象,它的实现类有两个一个是低配版的oppo手机,一个是高配版的oppo手机。vivo手机对象也是一个抽象对象,它的实现类也有低配版vivo手机和高配版vivo手机。然后还需要一个抽象工厂,而抽象工厂的两个子类一个是低配版手机工厂专门负责生产低配置的各个品牌的手机,一个是高配版手机工厂专门用来生产高配置的各个品牌的手机工厂。
代码实现使用抽象工厂模式实现不同配置的不同品牌手机的创建操作的流程图如下图所示:
Oppo.javapublic interface Oppo {
void photograph();
}
LowOppo.java
public class LowOppo implements Oppo {
@Override
public void photograph() {
System.out.println("低配版oppo手机拍照中。。。400像素");
}
}
HighOppo.java
public class HighOppo implements Oppo {
@Override
public void photograph() {
System.out.println("高配版oppo手机拍照中。。。1200像素");
}
}
Vivo.java
public interface Vivo {
void photograph();
}
LowVivo.java
public class LowVivo implements Vivo {
@Override
public void photograph() {
System.out.println("低配版vivo拍照中。。。。像素500");
}
}
HighVivo.java
public class HighVivo implements Vivo {
@Override
public void photograph() {
System.out.println("高配版vivo拍照中。。。。像素1000");
}
}
IPhoneFactory.java
interface IPhoneFactory {
Vivo createVivo();
Oppo createOppo();
}
LowPhoneFactory.java
public class LowPhoneFactory implements IPhoneFactory {
@Override
public Vivo createVivo() {
return new LowVivo();
}
@Override
public Oppo createOppo() {
return new LowOppo();
}
}
HighPhoneFactory.java
public class HighPhoneFactory implements IPhoneFactory {
@Override
public Vivo createVivo() {
return new HighVivo();
}
@Override
public 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



