抽象工厂
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
上述概论是官方的描述,在之前两篇文章中提到的例子,在只有一个产品的时候,是一个工厂模式,而在有两个或者多个产品的时候就是抽象工厂。在门的基础之上再添加了专家这一产品,在安装门的时候对应的门需要有对应的专家去安装门,则在这种情景之下,便成为了抽象工厂。
interface Door { //定义标准
public void getDescription();
class WoodenDoor implements Door {
@Override
public void getDescription() {
System.out.println("我是木门");
}
}
class IronDoor implements Door {
@Override
public void getDescription() {
System.out.println("我是铁门");
}
}
interface DoorExpert { //定义标准
public void getDescription();
class WoodenDoorExpert implements DoorExpert {
@Override
public void getDescription() {
System.out.println("我是木匠");
}
}
class IronDoorExpert implements DoorExpert {
@Override
public void getDescription() {
System.out.println("我是铁匠");
}
}
interface DoorFactory { //工厂 实现两个产品
public Door getDoor();
public DoorExpert getExpert();
}
class WoodenDoorFactory implements DoorFactory {
@Override
public Door getDoor() {
return new WoodenDoor();
}
@Override
public DoorExpert getExpert() {
return new WoodenDoorExpert();
}
}
class IronDoorFactory implements DoorFactory {
@Override
public Door getDoor() {
return new IronDoor();
}
@Override
public DoorExpert getExpert() {
return new IronDoorExpert();
}
}
public static void main(String[] args) {
WoodenDoorFactory WoodenDoor = new WoodenDoorFactory();
WoodenDoor.getDoor().getDescription();
WoodenDoor.getExpert().getDescription();
IronDoorFactory Iron = new IronDoorFactory();
Iron.getDoor().getDescription();
Iron.getExpert().getDescription();
}
运行结果如下: