三、抽象工厂模式

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

首先有若干个产品接口

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 小时前
JDK27中的Set.ofLazy
java·后端·java ee
文丑颜不良啊3 小时前
LeetCode2841~2860题目解析
java·leetcode
小南家的青蛙3 小时前
Tomcat与Jetty深度对比
java·tomcat·jetty
乌暮4 小时前
Spring AOP 与 Spring 事务:用大白话彻底理解原理与实践
java·数据库·spring boot·后端·sql·学习·spring
YDS8294 小时前
Small Spring IOC篇:容器事件及其监听器
java·spring
金銀銅鐵5 小时前
带您看懂字节码指令(三):一行加法里有什么
java·jvm
文丑颜不良啊5 小时前
LeetCode2921~2940题目解析
java·leetcode
北漂人Java6 小时前
基于 Spring AI Alibaba WorkFlow 构建 Java 生产级 AI Agent
java·人工智能·spring
用户112936112196 小时前
编译全绿,上线就崩:MyBatis 五层方法名大小写埋下的坑
java
文丑颜不良啊7 小时前
LeetCode2901~2920题目解析
java·leetcode