设计模式-抽象工厂模式实践案例

抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们具体的类。抽象工厂模式是围绕一个超级工厂创建其他工厂的模式。该模式的实现涉及到多个类和对象。

下面是一个抽象工厂模式的 Java 实践案例,假设我们有两种类型的产品(按钮和文本框),并且每种产品有两种不同的风格(Windows 风格和 MacOS 风格)。

步骤1:为每种类型的产品定义接口

1// 按钮产品接口
2public interface Button {
3    void paint();
4}
5
6// 文本框产品接口
7public interface TextBox {
8    void paint();
9}

步骤2:为每种风格的产品实现具体类

1// Windows 风格的按钮
2public class WindowsButton implements Button {
3    @Override
4    public void paint() {
5        System.out.println("Rendering a button in a Windows style.");
6    }
7}
8
9// MacOS 风格的按钮
10public class MacOSButton implements Button {
11    @Override
12    public void paint() {
13        System.out.println("Rendering a button in a MacOS style.");
14    }
15}
16
17// Windows 风格的文本框
18public class WindowsTextBox implements TextBox {
19    @Override
20    public void paint() {
21        System.out.println("Rendering a text box in a Windows style.");
22    }
23}
24
25// MacOS 风格的文本框
26public class MacOSTextBox implements TextBox {
27    @Override
28    public void paint() {
29        System.out.println("Rendering a text box in a MacOS style.");
30    }
31}

步骤3:创建抽象工厂接口

1public interface GUIFactory {
2    Button createButton();
3    TextBox createTextBox();
4}

步骤4:为每种风格实现具体的工厂类

1// Windows 风格的工厂
2public class WindowsFactory implements GUIFactory {
3    @Override
4    public Button createButton() {
5        return new WindowsButton();
6    }
7
8    @Override
9    public TextBox createTextBox() {
10        return new WindowsTextBox();
11    }
12}
13
14// MacOS 风格的工厂
15public class MacOSFactory implements GUIFactory {
16    @Override
17    public Button createButton() {
18        return new MacOSButton();
19    }
20
21    @Override
22    public TextBox createTextBox() {
23        return new MacOSTextBox();
24    }
25}

步骤5:客户端代码使用抽象工厂

1public class Client {
2    private Button button;
3    private TextBox textBox;
4
5    public Client(GUIFactory factory) {
6        button = factory.createButton();
7        textBox = factory.createTextBox();
8    }
9
10    public void paint() {
11        button.paint();
12        textBox.paint();
13    }
14
15    public static void main(String[] args) {
16        Client client;
17
18        // 使用 Windows 风格的工厂
19        client = new Client(new WindowsFactory());
20        client.paint();
21
22        // 使用 MacOS 风格的工厂
23        client = new Client(new MacOSFactory());
24        client.paint();
25    }
26}

在这个例子中,GUIFactory 是一个抽象工厂,它定义了创建一组 GUI 组件的方法。WindowsFactory 和 MacOSFactory 是两个具体的工厂,它们实现了 GUIFactory 并创建对应风格的 GUI 组件。

客户端代码通过抽象工厂接口来创建 GUI 组件,这样无论是 Windows 风格还是 MacOS 风格的 GUI 组件,都不需要修改客户端的逻辑。

抽象工厂模式的优点是,它支持对产品系列的扩展。如果我们想要添加一个新的产品风格(比如 Linux 风格),我们只需要添加一个新的工厂和一组产品类,而不需要修改现有代码。这种模式也有助于保持家族产品的一致性,确保客户端始终同时使用某个家族的所有产品。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/728589.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【React】state和props有什么区别?

1. state 一个组件的显示形态可以由数据状态和外部参数所决定,而数据状态就是state,一般在constructor中初始化 当需要修改里面的值的状态需要通过调用setState来改变,从而达到更新组件内部数据的作用,并且重新调用组件render方法…

JS实现chatgpt数据流式回复效果

最近高了一个简单chatgpt对话功功能,回复时希望流式回复,而不是直接显示结果,其实很简单,前端流式读取即可,后端SSE实现流式传输 前端用到fetch获取数据,然后利用reader读取 let requestId parseInt(Ma…

【Python】成功解决TypeError: ‘tuple‘ object does not support item assignment

【Python】成功解决TypeError: ‘tuple’ object does not support item assignment 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&am…

C语言对应汇编代码分析用gdb

在 GDB(GNU 调试器)中,layout 命令用于控制调试会话期间显示的窗口布局。它允许您在单个 GDB 窗口中同时查看源代码、汇编代码、寄存器内容等,以帮助您更好地理解程序的执行状态。以下是 layout 命令的基本用法和示例:…

算法归纳【数组篇】

目录 二分查找1. 前提条件:2. 二分查找边界 2.移除元素有序数组的平方长度最小的子数组59.螺旋矩阵II54. 螺旋矩阵 二分查找 参考链接 https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html#%E6%80%9D%E8%B7%AF 1. 前提条件: 数…

SQL24 统计每个用户的平均刷题数

题意明确: 仅查看山东大学的用户在不同难度下的每个用户的平均答题题目数 问题分解: 限定条件:山东大学的用户 up.university"山东大学";不同难度:按难度分组group by difficult_level平均答题数&#xff…

阿里云ECS磁盘扩容操作手册

云原生专栏大纲 文章目录 ESC磁盘扩容步骤前提条件云盘备份云盘扩容扩容分区和文件系统前提条件操作视频操作步骤准备工作:获取目标云盘信息步骤1:扩容分区步骤2:扩容文件系统 ESC磁盘扩容步骤 扩容已有云盘的操作步骤和注意事项_云服务器 …

影响哈默纳科Harmonic减速机使用寿命的5大因素

哈默纳科HarmonicDrive减速机以其轻量、小型、传动效率高、减速范围广、精度高等特点,被广泛应用于各种传动系统中。然而,尽管哈默纳科Harmonic减速机具有诸多优势,但其使用寿命仍可能受到多种因素的影响。 首先,环境因素对哈默纳…

ThreadLocal, InheritableThreadLocal和TransmittableThreadLocal

ThreadLocal, InheritableThreadLocal和TransmittableThreadLocal ThreadLocal(TL) 后续部分地方会使用ThraedLocal简称为TL 什么是TL? ThreadLocal是Java中的一个类, 也称为线程本地变量, 它提供了线程局部变量的功能。每个ThreadLocal对象都可以存储一个线程本地的变量副…

STM32的IO模拟串口

串口的时序就不再多讲了,主要是分享一个比自己写的IO模拟串口的实例 申明: 这个波特率为115200 分频系数为8 自动重载值为68 约等于8.7微秒 使用其他波特率或者IO口,只需要修改.h文件中的对应参数即可 头文件 #ifndef IO_UART_H #def…

Service Mesh:如何为您的微服务架构带来可靠性和灵活性

在云原生架构中,Service Mesh 技术成为了微服务架构中不可或缺的一环。本文灸哥将和你一起探讨 Service Mesh 技术的原理、功能和实践,帮助架构师和开发人员更好地理解和应用这一关键技术。 1、Service Mesh 技术概述 Service Mesh 又称为服务网格&…

世界的本质是旋转(5)-在复平面上驱动软件无线电SDR发射BPSK波形

在上一篇文章中,我们介绍了复平面、拍照采样的一些思维实验。从本节开始,转入现实应用,通过控制复平面向量的位置,实现一个完整的BPSK全双工通信通道。 发射方:通过控制复平面向量在各个时刻的位置来携带信息的技术&a…

Axure RP 10:让原型设计更快、更直观、更智能 mac版

Axure RP 10是一款强大的原型设计工具,它能够帮助设计师快速创建高保真、交互式的原型,从而更好地展示和测试设计方案。这款软件凭借其直观易用的界面和丰富的功能,已经成为了许多设计师的首 选工具。 Axure RP 10 for Mac版软件获取 首先&a…

将D*算法应用到llm解码

将D算法应用于LLM解码是一个非传统的尝试,因为D算法通常用于动态环境中的路径规划,而语言模型解码是一个序列生成问题。然而,我们可以尝试将D算法的原理应用到解码过程中,特别是在处理动态变化的环境或者需要实时更新解码路径的场…

C++之进程管理

目录 1、创建进程 2、获取指定进程PID 3、结束进程 4、进程枚举 进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,也是操作系统结构的基础。它是操作系统动态执行的基本单元,在传统的操作系统中&#…

AI论文速读 | 【综述】城市计算中跨域数据融合的深度学习:分类、进展和展望

题目:Deep Learning for Cross-Domain Data Fusion in Urban Computing: Taxonomy, Advances, and Outlook 作者:Xingchen Zou, Yibo Yan, Xixuan Hao, Yuehong Hu, Haomin Wen(温皓珉), Erdong Liu, Junbo Zhang(张钧…

进程之舞:操作系统中的启动、状态转换与唤醒艺术

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua,在这里我会分享我的知识和经验。&#x…

解决QT cc1plus.exe: error: out of memory allocating

QT中增加资源文件过大时,会编译不过,报错: cc1plus.exe: out of memory allocating 1073745919 bytes 使用qrc资源文件,也就是在QT的工程中添加资源文件,就是添加的资源文件(如qrc.cpp)会直接被…

简明固体物理--晶体的形成与晶体结构的描述

简明固体物理-国防科技大学 chapter 1 Formation of Crystal Contents and roadmapQuantum Mechanics and atomic structureElectronsOld quantum theoryMethod of Quantum MechanicsDistributing functions of micro-particles BindingCrystal structure and typical crystal…