三、抽象工厂模式

  • 目的 :提供一个接口,用于创建相关或依赖对象的家族,而不需要指定它们的具体类。
  • 核心 :抽象工厂接口声明一组创建方法,每个具体工厂实现这些方法以创建属于同一"家族"或"主题"的一组产品。
  • 场景 :在图形界面设计中,可以使用抽象工厂模式来创建不同操作系统的窗口、按钮等组件。

首先有若干个产品接口

java 复制代码
public interface IProduct1 {
	void show();
}
java 复制代码
public interface IProduct2 {
	void show();
}

然后有具体的产品类实现这些接口

java 复制代码
public class Product1 implements IProduct1 {
	@Override
	public void show() {
		System.out.println("产品1");
	}
}
java 复制代码
public class Product1 implements IProduct2 {
	@Override
	public void show() {
		System.out.println("产品2");
	}
}

接着有若干子类继承这些产品类

java 复制代码
public class GradeProduct1A extends Product1 {
	@Override
	public void show() {
		super.show();		// 可以调用父类的方法
		System.out.println("产品1的型号A");
	}
}
java 复制代码
public class GradeProduct1B extends Product1 {
	@Override
	public void show() {
		super.show();		// 可以调用父类的方法
		System.out.println("产品1的型号B");
	}
}
java 复制代码
public class GradeProduct1A extends Product2 {
	@Override
	public void show() {
		super.show();		// 可以调用父类的方法
		System.out.println("产品2的型号A");
	}
}
java 复制代码
public class GradeProduct1B extends Product2 {
	@Override
	public void show() {
		super.show();		// 可以调用父类的方法
		System.out.println("产品2的型号B");
	}
}

核心来了,声明一个工厂接口,并在里面声明创建上面若干子类实例的方法

java 复制代码
public interface IFactory {
	public IProduct1 createProduct1A();
	public IProduct1 createProduct1B();
	public IProduct2 createProduct2A();
	public IProduct2 createProduct2B();
}

最后用工厂类实现工厂接口

java 复制代码
public class Factory implements IFactory {

	@Override
	public IProduct1 createProduct1A() {
		return new GradeProduct1A();
	}

	@Override
	public IProduct1 createProduct1B() {
		return new GradeProduct1B();
	}

	@Override
	public IProduct2 createProduct2A() {
		return new GradeProduct2A();
	}

	@Override
	public IProduct2 createProduct2B() {
		return new GradeProduct2B();
	}
}

在主函数调用

java 复制代码
public class MainTest {
	public static void main(String[] args) {
		IFactory factory = new Factory();		// 先将工厂类实例化
		IProduct1 product1 = factory.createProduct1A(); // 再分别创建各种产品
		product1.show();

		IProduct1 product12 = factory.createProduct1B();
		product12.show();

		IProduct2 product2 = factory.createProduct2A();
		product2.show();

		IProduct2 product22 = factory.createProduct2B();
		product22.show();
	}
}
相关推荐
关于不上作者榜就原神启动那件事3 小时前
从 MDC 到 Agent:我手搓的文档路由协议,在 Spring AI Alibaba 里找到了正式实现
java·人工智能·spring·ai·agent
亦暖筑序3 小时前
重新认识 AgentScope-Java 2.0:ReActAgent 负责推理,HarnessAgent 负责运行
java·后端·agent
木井巳3 小时前
【DFS解决floodfill算法】岛屿的最大面积
java·算法·leetcode·深度优先
林森lsjs3 小时前
完结撒花!Java SE 语法阶段总结!
java·开发语言
lupai3 小时前
短信接口快速接入与调用实战指南
java·开发语言·数据库
ltqvibe3 小时前
企业智能问数落地:从一句话到跨系统完整答案
java·人工智能·本体语义平台
会编程的吕洞宾4 小时前
Spring Boot 虚拟线程实战:从原理到生产环境
java·后端·spring
黑桃小柒74 小时前
Prompt 工程的“断舍离“:如何用更少的词让 AI Agent 更聪明
java·后端·spring
撩妹帝九歌4 小时前
Java文件写入与编码、字节数组、字符集、字符编解码 一文打通!
java·开发语言
一路向北North4 小时前
Spring AI(9) :解决百炼平台兼容性问题
java·人工智能·spring