设计模式: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
相关推荐
GodKeyNet2 小时前
设计模式-模板模式
设计模式·模板模式
缘来是庄6 小时前
设计模式之建造者模式
java·设计模式·建造者模式
铛铛啦啦啦9 小时前
“对象创建”模式之原型模式
设计模式·原型模式
牛奶咖啡139 小时前
学习设计模式《十六》——策略模式
学习·设计模式·策略模式·认识策略模式·策略模式的优缺点·何时选用策略模式·策略模式的使用示例
OpenC++10 小时前
【C++】观察者模式
c++·观察者模式·设计模式
一块plus11 小时前
2025 年值得一玩的最佳 Web3 游戏
算法·设计模式·程序员
缘来是庄12 小时前
设计模式之代理模式
java·设计模式·代理模式
勤奋的知更鸟13 小时前
Java 编程之策略模式详解
java·设计模式·策略模式
暮乘白帝过重山13 小时前
设计模式篇:灵活多变的策略模式
设计模式·策略模式
GodKeyNet13 小时前
设计模式-策略模式
设计模式·策略模式