设计模式: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
相关推荐
梓仁沐白20 分钟前
【Agent 设计模式】推理技术
设计模式
Kinghiee23 分钟前
从使用场景切入前端常见设计模式
前端·设计模式
啦啦啦啦啦zzzz21 小时前
设计模式:单例模式和工厂模式
c++·单例模式·设计模式·工厂模式
小白说大模型1 天前
Python 工程化设计模式:AI 项目中的异步流水线与策略模式实战
人工智能·python·设计模式
choumin1 天前
行为型模式——中介者模式
c++·设计模式·中介者模式·行为型模式
geovindu2 天前
Java: Chain of Responsibility Pattern
java·开发语言·后端·设计模式·责任链模式·行为模式
workflower2 天前
装备企业的 AI 路线图
人工智能·深度学习·机器学习·设计模式·机器人
geovindu3 天前
CSharp:Chain of Responsibility Pattern
开发语言·后端·设计模式·c#·.net·责任链模式·行为模式
梓仁沐白3 天前
【Agent 设计模式】路由模式(Routing)
大数据·设计模式
梓仁沐白3 天前
【Agent 设计模式】多智能体协作
microsoft·设计模式·php