设计模式: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
相关推荐
闲不住的李先森16 分钟前
乐观更新
前端·react.js·设计模式
数据智能老司机3 小时前
数据工程设计模式——实时摄取与处理
大数据·设计模式·架构
Asort6 小时前
JavaScript设计模式(七)——桥接模式:解耦抽象与实现的优雅之道
前端·javascript·设计模式
原则猫7 小时前
单例模式工程运用
前端·设计模式
charlie11451419117 小时前
精读C++20设计模式:行为型设计模式:中介者模式
c++·学习·设计模式·c++20·中介者模式
虫师c20 小时前
分布式系统设计模式:从理论到实践
微服务·设计模式·系统架构·高可用·分布式系统
半旧夜夏20 小时前
【设计模式】核心设计模式实战
java·spring boot·设计模式
ThisIsMirror1 天前
设计模式简要介绍
设计模式
Lei活在当下1 天前
【业务场景架构实战】7. 多代智能手表适配:Android APP 表盘编辑页的功能驱动设计
android·设计模式·架构
澄澈i1 天前
设计模式学习[20]---桥接模式
c++·学习·设计模式·桥接模式