文章目录
一、抽象工厂模式知识回顾
参考笔记:设计模式 学习笔记(一)五个创建型模式 | Java 语言实现 | 工厂方法设计模式 | 抽象工厂模式 |建造者模式 | 单例模式 | 原型模式
抽象工厂:一种为访问类提供一个能创建一组相关或者相互依赖对象的接口
是工厂方法的升级版本,工厂方法只生产一个等级的产品,而抽象工厂则可生产多个等级的产品。
优点:
- 支持同时管理多个等级产的产品
- 可扩展性高,符合开闭原则
缺点:
- 由于是抽象的工厂,在增加新产品时,所有的工厂类都需要修改
主要组成
1)Absract Factory 抽象工厂,提供创建产品的接口,可创建多个不同等级的产品
2)Concrete Factory 具体工厂,主要实现抽象产品中的多个抽象方法,完成具体产品的创建
3)Product 抽象产品,定义了产品的规范,描述其主要的特性和功能,一般有多个
4)Concrete Product 具体产品,实现了抽象产品所定义的接口,由具体工厂 Concrete Factory 来创建,与具体工厂的关系是 N : 1
模板代码:
// 抽象产品1
interface Product1 {
public void produce(); // 生产
public void sale(); // 销售
}
// 具体产品1
class ConcreteProduct1A implements Product1{
@Override
public void produce() {
System.out.println("产品1的A 生产成功");
}
@Override
public void sale() {
System.out.println("产品1的A 出售成功");
}
}
// 具体产品2
class ConcreteProduct2A implements Product2{
@Override
public void product() {
System.out.println("产品2的A 生产成功");
}
@Override
public void sale() {
System.out.println("产品2的A 销售成功");
}
}
// 抽象产品1
interface Product2{
public void product(); // 生产
public void sale(); // 销售
}
// 抽象工厂
interface AbstractFactory{
public Product1 newProduct1();
public Product2 newProduct2();
}
// 具体工厂
class ConcreteFactory implements AbstractFactory{
@Override
public Product1 newProduct1() {
System.out.println("工厂1 开始生产 产品1...");
return new ConcreteProduct1A();
}
@Override
public Product2 newProduct2() {
System.out.println("工厂2 开始生产 产品2...");
return new ConcreteProduct2A();
}
}
public class Demo {
public static void main(String[] args) {
// 创建工厂
ConcreteFactory factory = new ConcreteFactory();
// 生产
Product1 product1 = factory.newProduct1();
Product2 product2 = factory.newProduct2()