设计模式-抽象工厂模式
|Word count:514|Reading time:1min|Post View:
设计模式-抽象工厂模式

- 提供一个产品类的接口,产品类均要实现这个接口
提供一个工厂类的接口。工厂类均要实现这个接口(即抽象工厂)。
由工厂实现类创建产品类的实例。工厂实现类应有一个方法,用来实例化产品类。
提供多个工厂实现类。工厂实现类分别构造不通产品族的产品。主要解决接口选择的问题
- 实例:
- 应用场景: 在编码时不能预见需要创建哪种类的实例。系统不应依赖于产品类实例如何被创建、组合和表达的细节。
- 抽象工厂模式创建的是对象家族,也就是很多对象而不是一个对象,
- 并且这些对象是相关的,也就是说必须一起创建出来。
- 而工厂模式只是用于创建一个对象,这和抽象工厂模式有很大不同。
抽象工厂模式用到了工厂模式来创建单一对象,
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| package main.java.com.usher.DesignPatterns.AbstractFactory;
public abstract class AbstractFactory { public abstract AbstractProductA createProductA(); public abstract AbstractProductB createProductB(); }
|
1 2
| public class AbstractProductA { }
|
1 2
| public class AbstractProductB { }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
public class ConcreteFactory1 extends AbstractFactory{ @Override public AbstractProductA createProductA() { return new ProductA1(); }
@Override public AbstractProductB createProductB() { return new ProductB1(); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
public class ConcreteFactory2 extends AbstractFactory { @Override public AbstractProductA createProductA() { return new ProductA2(); }
@Override public AbstractProductB createProductB() { return new ProductB2(); } }
|
1 2 3 4 5
|
public class ProductA1 extends AbstractProductA { }
|
1 2 3
| public class ProductA2 extends AbstractProductA { }
|
1 2
| public class ProductB1 extends AbstractProductB { }
|
1 2 3
| public class ProductB2 extends AbstractProductB { }
|
1 2 3 4 5 6 7 8 9 10
| public class Client { public static void main(String[] args) { AbstractFactory abstractFactory = new ConcreteFactory1(); AbstractProductA productA = abstractFactory.createProductA(); AbstractProductB productB = abstractFactory.createProductB(); abstractFactory = new ConcreteFactory2(); productA = abstractFactory.createProductA(); productB = abstractFactory.createProductB(); } }
|