三、抽象工厂模式

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

首先有若干个产品接口

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();
	}
}
相关推荐
Percep_gan9 分钟前
Java8中的stream的测试使用
java
砍材农夫21 分钟前
物联网实战:Spring Boot MQTT | MQTT 设备模拟器演示(附源码)
java·spring boot·后端·物联网·spring·netty
EAIReport37 分钟前
Spring AI 详解:Java 开发者快速落地 AI 应用
java·人工智能·spring
YDS82939 分钟前
DeepSeek RAG&MCP + Agent智能体项目 —— Agent执行链路设计之ReAct Loop
java·spring boot·ai·agent·deepseek
c++之路39 分钟前
C++ 设计模式全总结
java·c++·设计模式
码语智行1 小时前
首页地图功能分析
java
段ヤシ.1 小时前
回顾Java知识点,面试题汇总Day10:日期类、IO流(持续更新)
java·序列化·反序列化·日期类·i/o流
luck_bor2 小时前
IO流知识点笔记
java·开发语言·笔记
大圣编程2 小时前
面向对象深度理解
java·开发语言·算法
影寂ldy2 小时前
C# const 常量 / readonly 只读 / static readonly
java·开发语言·c#