设计模式|抽象工厂
意图
抽象工厂提供一个接口,用来创建相关的对象家族,而不是和工厂方法一样,创建一个对象。
抽象工厂
抽象工厂模式的各个角色:
- 抽象工厂角色(Factory),工厂方法模式的核心,是具体工厂角色必须实现的接口或者必须继承父类。在 Java 类中他是抽象类或者接口来实现的。
- 具体工厂角色(ConcreteFactory),这个是实现抽象工厂接口的具体工厂类。
- 抽象产品角色(Product):抽象工厂模式所创建对象的基类,也就是产品对象共同父类。
- 具体产品角色(ConcreteProduct),这个角色实现了抽象产品橘色所定义的接口。
抽象工厂模式创建的是对象家族,也就是很多对象而不是一个对象。抽象工厂模式用了工厂方法模式来创建单一对象。 AbstractFactory 中的 createProductA() 和 createProductB() 都可让子类实现,这两个方法单独来看就是在创建一个对象。
Client 要通过 AbstaractFactoty 同时调用两个方法创建两个对象,这里的两个对象属于同一类。
类图
代码实现
产品抽象类
public class AbstractProductA {
}
public class AbstractProductB {
}
产品聚类
public class ProductA1 extends AbstractProductA {
}
public class ProductA2 extends AbstractProductA {
}
public class ProductB1 extends AbstractProductB {
}
public class ProductB2 extends AbstractProductB {
}
抽象工厂类
public abstract class AbstractFactory {
abstract AbstractProductA createProductA();
abstract AbstractProductB createProductB();
}
抽象工厂具体实现
public class ConcreteFactory1 extends AbstractFactory {
AbstractProductA createProductA() {
return new ProductA1();
}
AbstractProductB createProductB() {
return new ProductB1();
}
}
public class ConcreteFactory2 extends AbstractFactory {
AbstractProductA createProductA() {
return new ProductA2();
}
AbstractProductB createProductB() {
return new ProductB2();
}
}
客户端调用
public class Client {
public static void main(String[] args) {
AbstractFactory abstractFactory = new ConcreteFactory1();
AbstractProductA productA = abstractFactory.createProductA();
AbstractProductB productB = abstractFactory.createProductB();
// do something with productA and productB
}
}
参考资料
- https://blog.csdn.net/chitangchan3789/article/details/101004317
欢迎关注公众号: 程序员开发者社区
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com