/**
* 抽象工厂模式。<br/>
* 抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
* @author Bright Lee
*/
public class AbstractFactoryPattern {
public static void main(String[] args) {
AbstractFactory factory001 = new ConcreteFactory001();
Client client001 = new Client(factory001);
client001.doSomething();
AbstractFactory factory002 = new ConcreteFactory002();
Client client002 = new Client(factory002);
client002.doSomething();
}
}
class Client {
private AbstractFactory factory;
/**
* 客户只需要知道传入的是一个抽象工厂,而不需要知道工厂的具体类型。
*/
public Client(AbstractFactory factory) {
this.factory = factory;
}
public void doSomething() {
Product product = factory.createProduct();
System.out.println("获得的产品是:" + product);
}
}
interface AbstractFactory {
/**
* 抽象工厂的所有代码均由子类实现。
*/
public Product createProduct();
}
class ConcreteFactory001 implements AbstractFactory {
public Product createProduct() {
return new Product001();
}
}
class ConcreteFactory002 implements AbstractFactory {
public Product createProduct() {
return new Product002();
}
}
interface Product {
}
class Product001 implements Product {
public String toString() {
return "Product001";
}
}
class Product002 implements Product {
public String toString() {
return "Product002";
}
}
运行结果:
获得的产品是:Product001
获得的产品是:Product002