创建型模式之抽象工厂模式

news/2024/11/8 0:10:30/

抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,用于提供一个接口,用于创建相关或依赖对象的家族,而不需要指定具体实现类。
它通过将产品的创建委托给多个具体工厂类来实现。

在抽象工厂模式中,存在一个抽象工厂接口,该接口声明了一组用于创建不同类型产品(如产品族)的方法。
每个具体工厂类实现了抽象工厂接口,并负责创建特定类型的产品。这些产品通常属于同一产品族,具有共同的主题或关联性。

使用抽象工厂模式可以实现以下目标:
将客户端代码与具体产品类解耦,使其不依赖于特定的产品实现。
支持切换不同的产品族,只需替换对应的具体工厂类即可。
保持产品之间的一致性,确保创建的产品是相互关联且兼容的。

下面是抽象工厂模式的基本结构:
抽象工厂(AbstractFactory):声明创建不同类型产品的接口。
具体工厂(ConcreteFactory):实现抽象工厂接口,负责创建具体类型的产品。
抽象产品(AbstractProduct):声明产品共有的接口。
具体产品(ConcreteProduct):实现抽象产品接口,具体工厂创建的产品。

提供demo版代码更容易理解

/*** @author zhou*  抽象产品A*/
interface ProductA {void operationA();
}/*** @author zhou*  抽象产品B*/
interface ProductB {void operationB();
}/*** @author zhou*  具体产品A1*/
class ConcreteProductA1 implements ProductA {@Overridepublic void operationA() {System.out.println("具体产品A1的操作");}
}/*** @author zhou*  具体产品A2*/
class ConcreteProductA2 implements ProductA {@Overridepublic void operationA() {System.out.println("具体产品A2的操作");}
}/*** @author zhou*  具体产品B1*/
class ConcreteProductB1 implements ProductB {@Overridepublic void operationB() {System.out.println("具体产品B1的操作");}
}/*** @author zhou*  具体产品B2*/
class ConcreteProductB2 implements ProductB {@Overridepublic void operationB() {System.out.println("具体产品B2的操作");}
}/*** @author zhou*  抽象工厂*/
interface AbstractFactory {ProductA createProductA();ProductB createProductB();
}/*** @author zhou*  具体工厂1*/
class ConcreteFactory1 implements AbstractFactory {@Overridepublic ProductA createProductA() {return new ConcreteProductA1();}@Overridepublic ProductB createProductB() {return new ConcreteProductB1();}
}/*** @author zhou*  具体工厂2*/
class ConcreteFactory2 implements AbstractFactory {@Overridepublic ProductA createProductA() {return new ConcreteProductA2();}@Overridepublic ProductB createProductB() {return new ConcreteProductB2();}
}/*** @author zhou*  客户端使用*/
public class Client {public static void main(String[] args) {// 创建具体工厂1AbstractFactory factory1 = new ConcreteFactory1();// 通过具体工厂1创建产品A和产品BProductA productA1 = factory1.createProductA();ProductB productB1 = factory1.createProductB();// 调用产品A和产品B的操作方法productA1.operationA();productB1.operationB();// 创建具体工厂2AbstractFactory factory2 = new ConcreteFactory2();// 通过具体工厂2创建产品A和产品BProductA productA2 = factory2.createProductA();ProductB productB2 = factory2.createProductB();// 调用产品A和产品B的操作方法productA2.operationA();productB2.operationB();}
}

上述代码中,使用了抽象产品(ProductA和ProductB)以及具体产品(ConcreteProductA1、ConcreteProductA2、ConcreteProductB1、ConcreteProductB2)。
抽象工厂接口(AbstractFactory)定义了创建产品A和产品B的抽象方法。具体工厂(ConcreteFactory1、ConcreteFactory2)实现了抽象工厂接口,
并分别创建了具体产品A和具体产品B。
在客户端代码中,我们可以根据不同的具体工厂选择创建对应类型的产品,并调用其操作方法。输出结果将显示具体产品的操作。

总结:抽象工厂模式通过提供一个接口来创建一族相关或依赖对象,将产品的创建与客户端代码解耦,增加系统的灵活性和可扩展性。
它适用于需要创建多个相关产品系列的场景,并且这些产品系列具有共同的主题或关联性。


http://www.ppmy.cn/news/553459.html

相关文章

【头歌-Python】Python第六章作业(初级)

第1关:列表的属性与方法 任务描述 初始化一个空列表,输入一个正整数 n。 接下来,你将被要求输入 n 个指令,每得到一个指令后,根据指令的字符串进行对应的功能操作。 指令形式及对应功能如下: insert i e…

计算机语言发展史

【1】第一代:机器语言(相当于人类的原始阶段) 机器语言是机器指令的集合,机器指令展开来讲就是一台机器可以正确执行的命令。电子计算机的机器指令是一列二进制数字。计算机将之转变为一列高低电平,以使计算机的电子器…

《数字摄影与摄像》学习笔记——摄影课理论基础

1、数码相机 ——如何使用一部相机 数码相机的种类有哪些? 一般上分为卡片机,单反相机和微单相机 。卡片式相机就是一般所说的傻瓜数码相机,它的主要特点就是不能更换镜头,同时卡片机一般十分的小巧,有些只有卡片手机…

Si24R2F+2.4GHz ISM 频段低功耗无线集成嵌入式发射基带无线发射芯片

Si24R2F在原有Si24R2F的基础上:优化了射频性能、增加NTC测温、增加自动唤醒间隔、优化了蓝牙性能。在固定资产管理、冷链物流和牛羊畜牧业标签市场更具竞争力。 在原有SI24R2E做白卡/校徽的群体,在新的卡片机应用,更加推荐用SI24R2F&#xf…

【白瓢党怎样避免沦为氪金党?细数游戏中的氪金套路】

87年的我并不是一个游戏爱好者,我成功的躲过了CS、传奇、魔兽、也没有被王者、英雄、吃鸡打开我的钱包,却在一款手游上不知不觉的充值了10000多!到一万的时候,我突然间冷静了,我不能在在上面沦陷了,冷静下来…

A卡是什么

显卡我们常说的有两种,A 卡和 N 卡,所谓的 A 卡就是由厂商 AMD 做制造的显卡:A 卡其实是 ATI 显卡的简称,ATI 自从被 AMD 收购之后,也被称为 AMD 显卡,A 卡的 A 其实就是 AMD 的开头字母,是 AMD…

为什么越来越多的人喜欢拍照呢?如何用手机拍出大片?最受欢迎的摄影主题是什么呢?

为什么越来越多的人喜欢拍照呢?如何用手机拍出大片?最受欢迎的摄影主题是什么呢? 导读我们的生活,离不开这些浪漫瞬间不发出来分享,还拍照干嘛拍出“百万大片”,离我们并不遥远 参考:华为影像、…

时间调制阵列

可以看到,根据式子6 入射的线性调频信号(也就是echo lfm ,LFM信号的回波) S r ( θ , t ) S_r(\theta, t) Sr​(θ,t)是由发射的LFM信号的无穷多次谐波构成 而且呢, 相邻谐波分量的载频,都相差一个 f p f_p fp​, 也就是开关信号的…