设计模式: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
相关推荐
何中应10 分钟前
【设计模式-4.11】行为型——解释器模式
java·设计模式·解释器模式
WispX8881 小时前
【设计模式】门面/外观模式
java·开发语言·设计模式·系统架构·外观模式·插件·架构设计
蔡蓝2 小时前
设计模式-外观模式
microsoft·设计模式·外观模式
琢磨先生David2 小时前
简化复杂系统的优雅之道:深入解析 Java 外观模式
java·设计模式·外观模式
on the way 12314 小时前
结构性设计模式之Flyweight(享元)
java·设计模式·享元模式
暴躁哥18 小时前
深入理解设计模式之访问者模式
设计模式·访问者模式
佩奇的技术笔记18 小时前
从Java的JDK源码中学设计模式之装饰器模式
java·设计模式·装饰器模式
on the way 12318 小时前
结构型设计模式之Proxy(代理)
设计模式·代理模式
YGGP1 天前
【结构型模式】装饰器模式
设计模式
将编程培养成爱好1 天前
《复制粘贴的奇迹:小明的原型工厂》
c++·设计模式·原型模式