设计模式:14、抽象工厂模式(配套)

目录

0、定义

1、抽象工厂模式的四种角色

2、抽象工厂的UML类图

3、示例代码


0、定义

提供一个创建一系列或相互依赖对象的接口,而无须指定它们具体的类。

1、抽象工厂模式的四种角色

  • 抽象产品(Product):一个抽象类或接口,负责定义具体产品必须实现的方法。
  • 具体产品(ConcreteProduct):具体产品 是个类,继承或实现抽象产品接口的类。
  • 抽象工厂(AbstractFactory):一个抽象类或接口,负责定义若干个抽象方法。
  • 具体工厂(ConcreteFactory):具体工厂 重写或实现抽象工厂 中的抽象方法,使该方法返回具体产品的实例。

2、抽象工厂的UML类图

3、示例代码

抽象产品A

java 复制代码
package xyz.jangle.design.abstractfactory;

public interface ProductA {
	
}

具体产品A1和A2

java 复制代码
package xyz.jangle.design.abstractfactory;

public class ProductA1 implements ProductA {

}
java 复制代码
package xyz.jangle.design.abstractfactory;

public class ProductA2 implements ProductA {

}

抽象产品B

java 复制代码
package xyz.jangle.design.abstractfactory;

public interface ProductB {

}

具体产品B1和B2

java 复制代码
package xyz.jangle.design.abstractfactory;

public class ProductB1 implements ProductB {

}
java 复制代码
package xyz.jangle.design.abstractfactory;

public class ProductB2 implements ProductB {

}

抽象工厂

java 复制代码
package xyz.jangle.design.abstractfactory;

public abstract class AbstractFactory {
	
	public abstract ProductA createProductA();
	
	public abstract ProductB createProductB();

}

具体工厂1和具体工厂2

java 复制代码
package xyz.jangle.design.abstractfactory;

public class ConcreteFactory1 extends AbstractFactory {

	@Override
	public ProductA createProductA() {
		return new ProductA1();
	}

	@Override
	public ProductB createProductB() {
		return new ProductB1();
	}

}
java 复制代码
package xyz.jangle.design.abstractfactory;

public class ConcreteFactory2 extends AbstractFactory {

	@Override
	public ProductA createProductA() {
		return new ProductA2();
	}

	@Override
	public ProductB createProductB() {
		return new ProductB2();
	}

}

客户端(使用)

java 复制代码
package xyz.jangle.design.abstractfactory;

public class AppMain14 {
	
	public static void main(String[] args) {
		
		AbstractFactory factory1 = new ConcreteFactory1();
		ProductA productA = factory1.createProductA();
		ProductB productB = factory1.createProductB();
		System.out.println("抽象工厂1生产了 A1和B1的产品:"+ productA+" and "+productB);
		
		AbstractFactory factory2 = new ConcreteFactory2();
		ProductA productA2 = factory2.createProductA();
		ProductB productB2 = factory2.createProductB();
		System.out.println("抽象工厂2生产了 A2和B2的产品:"+ productA2+" and "+productB2);
	}

}

输出信息

bash 复制代码
抽象工厂1生产了 A1和B1的产品:xyz.jangle.design.abstractfactory.ProductA1@659e0bfd and xyz.jangle.design.abstractfactory.ProductB1@2a139a55
抽象工厂2生产了 A2和B2的产品:xyz.jangle.design.abstractfactory.ProductA2@15db9742 and xyz.jangle.design.abstractfactory.ProductB2@6d06d69c
相关推荐
快乐的划水a2 小时前
组合模式及优化
c++·设计模式·组合模式
Zyy~3 小时前
《设计模式》装饰模式
java·设计模式
落霞的思绪6 小时前
Java设计模式详细解读
java·开发语言·设计模式
是2的10次方啊7 小时前
🚀 JDK设计模式大揭秘:23种模式藏在你每天在用的类里
设计模式
步行cgn7 小时前
设计模式(Design Patterns)
设计模式
Zyy~13 小时前
《设计模式》代理模式
设计模式·代理模式
o0向阳而生0o14 小时前
93、23种设计模式之抽象工厂模式
设计模式·抽象工厂模式
Tadas-Gao15 小时前
Java设计模式全景解析:从演进历程到创新实践
java·开发语言·微服务·设计模式·云原生·架构·系统架构
饕餮争锋1 天前
设计模式笔记_行为型_观察者模式
笔记·观察者模式·设计模式
我命由我123451 天前
软件开发 - 避免过多的 if-else 语句(使用策略模式、使用映射表、使用枚举、使用函数式编程)
java·开发语言·javascript·设计模式·java-ee·策略模式·js