三、抽象工厂模式

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

首先有若干个产品接口

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();
	}
}
相关推荐
kongba0072 小时前
复刻 Claude Code 项目御马术缰绳系统 harness engineering 落地蓝图
java·linux·服务器
tERS ERTS2 小时前
Spring Cloud gateway 路由规则
java
ZUNr12 小时前
手写一个迷你版 @Column:注解到底是怎么工作的?
java
Treh UNFO2 小时前
MySQL中的通配符
java
AI茶水间管理员2 小时前
线程池核心线程数设为 0 会怎样?(附源码解析)
java·后端·面试
白开水都有人用2 小时前
点击数据行选中复选框-抽离公共方法
java·前端·html
NE_STOP2 小时前
SpringCloud进阶--Redis与分布式
java
MiNG MENS2 小时前
Spring Boot 实战篇(四):实现用户登录与注册功能
java·spring boot·后端
是码龙不是码农2 小时前
synchronized 底层原理深度详解
java·synchronized