Java设计模式 三十三 建造者模式 + 抽象工厂模式

设计模式之结构型设计模式(二):工厂模式 & 抽象工厂模式 & 建造者模式 工厂模式旨在提供一种统一的接口来创建对象,而将具体的对象实例化的过程延迟到子类或者具体实现中。有助于降低客户端代码与被创建对象之间的耦合度,提高代码的灵活性和可维护性。定义了一个创建对象的接口,但不负责具体对象的实例化。而是将实例化的责任交给它的子类或者具体实现,这种模式包括抽象工厂、工厂方法和简单工厂等不同形式。抽象工厂模式提供了一个接口,用于创建与产品家族相关的对象,无需制定具体类,有助于确保创建的对象能够相互配合使用,而无需指定具体的类。 阅读详情

建造者模式 + 抽象工厂模式

建造者模式(Builder Pattern)和抽象工厂模式(Abstract Factory Pattern)是两种常用的创建型设计模式,它们各自有不同的应用场景和优势。将这两者结合使用,可以帮助我们在构建复杂对象时更好地管理产品的创建过程,尤其是在需要管理多个产品组或者具有复杂构建步骤的场景下。

  • 建造者模式(Builder Pattern)专注于逐步构建一个复杂的对象。它通过将构建过程与表示分离,使得同样的构建过程可以创建不同的表示。

  • 抽象工厂模式(Abstract Factory Pattern)提供一个接口,用于创建一系列相关或依赖的对象,但不需要明确指定具体的类。抽象工厂通常用于创建一组相关的产品对象,如UI组件、操作系统控件等。

将这两者结合使用时,可以利用抽象工厂来管理多个产品族的创建,而使用建造者模式来构建每个具体产品的复杂部分。这种组合适合于产品包含多个子组件且子组件之间有复杂的构建关系时。


1. 场景说明

结合建造者模式和抽象工厂模式的场景通常出现在以下情况:

  1. 需要构建复杂的产品,且该产品的构建过程包含多个步骤: 如有多个相互关联的组件或模块,构建这些组件的过程较为复杂。
  2. 产品族: 需要创建多个不同类型的产品组(如不同风格的房子、不同操作系统下的UI控件等),每个产品组内有多个组件,且构建过程不完全相同。
  3. 构建过程与产品族相关: 不同产品族的构建步骤可能会有所不同,但每个族内的构建步骤是一致的。

2. 示例场景:创建多种类型的房子

假设我们有一个房屋构建系统,能够创建不同风格的房子(如现代风格和古典风格),每种风格的房子包含不同的组件(如门、窗、屋顶等)。我们可以使用抽象工厂模式来管理不同风格的房子工厂,而使用建造者模式来构建房子的不同部分(如门、窗、屋顶等)。


(1) 房子的组件接口

首先,我们定义房子的各个组件(如门、窗、屋顶等)的接口。

// 门接口
public interface Door {
   
   
    void build();
}

// 窗口接口
public interface Window {
   
   
    void build();
}

// 屋顶接口
public interface Roof {
   
   
    void build();
}

(2) 具体组件实现:现代风格和古典风格

根据风格的不同,门、窗、屋顶的实现也有所不同。

// 现代风格的门
public class ModernDoor implements Door {
   
   
    @Override
    public void build() {
   
   
        System.out.println("Building a modern door.");
    }
}

// 现代风格的窗
public class ModernWindow implements Window {
   
   
    @Override
    public void build() {
   
   
        System.out.println("Building a modern window.");
    }
}

// 现代风格的屋顶
public class ModernRoof implements Roof {
   
   
    @Override
    public void build() {
   
   
        System.out.println("Building a modern roof.");
    }
}
// 古典风格的门
public class ClassicalDoor implements Door {
   
   
    @Override
    public 
C++设计模式新解二 建造者模式+工厂模式 定义:将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式的角色包括: builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这些接口规定,具体要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。 ConcreteBuilder:实现Builder接口,根据不同的商业逻辑,具体化复杂对象的各部分创建。在建造过程完整后,提供产品的实例。 阅读详情

相关推荐

探索设计模式的魅力:创新思维与面试中的设计模式问题(超详细38题3万8字参考答案)

设计模式是在软件设计中经常出现的问题的解决方案。它是由经验丰富的开发人员在解决常见设计问题时总结出来的一套通用的解决方案,是一种对反复出现的设计问题的可重用的抽象描述。设计模式可以用于高质量的软件开发,它在软件开发过程中提供了一种复用可扩展性简化代码维护等方面的解决方案。设计模式通常包括以下几个要素:用来描述问题、解决方案和效果的简洁术语。描述了在何时使用该模式以及问题的背景和条件。

制定明确可量化的目标,坚持默默的做事。 1万+

告别Keil,在Windows上用VSCode + arm-none-eabi-gcc + Makefile搭建国产MCU开发环境(附JLink配置避坑)

本文详细介绍了如何在Windows上使用VSCode、arm-none-eabi-gcc和Makefile搭建国产MCU开发环境,替代传统的Keil和IAR。内容涵盖工具链配置、工程结构设计、Makefile编写、VSCode集成调试以及高效开发工作流,特别针对国产MCU如复旦微FM33系列提供了优化方案和避坑指南。

weixin_28729205的博客 433

Orcad原理图导入Allegro

在即将设计的PCB中,将层叠设置好后,执行File→import→parameters,将刚才导出的.prm文件导入,很多参数就自动设置好了,与已完成的PCB里的参数保持一致。具体操作是:在已完成的PCB里执行File→Exoprt→Parameters,弹出下图所示的对话框,选择需要导出的设计参数后,设置到导出路径,导出记录设计参数的文件(.prm)。在.brd文件导入网表后,往往需要页面大小、格点、各层叠里各要素显示颜色等参数,手动设置十分麻烦,我们可以在一块已经完成的PCB里导出记录设计参数的文件。

sinat_27007097的博客 2085

抖音自定义卡片链接(图文链接)

抖音自定义可以自定义标题,打开链接,和展示图片 效果 主要代码 public void sendMessage(String conversationId, Object aBaseContent) throws Exception { // C233282u5.LIZIZ.LIZ().LIZIZ(LIZ).LIZ(obtain).LIZ(hLn).LIZ((AbstractC59811HHc) new H9Q()); Object HOa = ReflectionUtil

傅恒的博客 4140

Linux yum源配置以及yum命令讲解

前面为大家介绍了RPM二进制包安装软件,RPM包安装的最大的缺点也提到过,就是依赖性太强,一旦遇到依赖问题,则需要我们手动解决包之间具有依赖性的问题,今天为大家介绍一种可自动解决包之间依赖关系的安装方式:yum。 yum 全称“Yellow dog Updater, Modified”,是一个专门为了解决包的依赖关系而存在的软件包管理器。就好像 Windows 系统上我们通常可以通过各种软件管家实现软件的一键安装、升级和卸载,yum就是Linux 系统中的一键安装工具。yum 解决依赖关系的基本逻辑是:yu

九派Linux的博客 2283

esp32 python开发环境搭建_eclipse esp32开发环境搭建

安装方法基本是按照官网提供的方法来操作https://github.com/espressif/idf-eclipse-plugin#GettingStarted但是官网的方法安装之后还是不能编译成功的,第一次编译会出现一下问题问题1:Building in: E:\eclipse-workspace\helloworlk\buildcmake -G Ninja -DCMAKE_TOOLCHAIN...

weixin_39978276的博客 1262

python全栈入门到实战【基础篇 02】环境搭建:Python解释器与PyCharm、VSCode编辑器安装配置详解

本文详解Python环境搭建步骤。首先安装解释器(运行代码核心),需从官网下载,选3.8及以上版本(勿选2.x)。Windows安装必勾“Add Python.exe to PATH”,验证用`python --version`;Mac选universal2安装包,验证用`python3 --version`。 编辑器二选一:PyCharm社区版(免费,新手推荐),安装后需配置解释器路径;VSCode轻量,需装Python插件并选择解释器。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 5万+

Windows11安装配置openclaw+deepseek(大龙虾)

密码可以随便设置(注意wsl系统本质上是linux系统,设置密码系统是不会像windows一样显示*点位符的),输入密码后敲回车再次输入密码,输入后敲回车。如果不小心关闭这个界面,可以再次进入powershell,输入wsl进行系统。在powershell中输入:curl -fssL https://openclaw.ai/install.sh | bash。下面是否通过第3方平台和openclaw交互,我选择j最后一项:skip for now。到下面这一步,可以通过键盘的左箭头选择Yes.

mahailiang的专栏 343

OpenHarmony WiFi子系统全解析:从架构到代码实现(大合集)

头文件路径[相对路径][相对路径][相对路径][相对路径]// 网络配置结构 (wifi_device_config.h)// SSID字符串// 预共享密钥// 安全类型// 网络ID// 优先级// 是否隐藏网络// 扫描信息结构 (wifi_scan_info.h)// SSID// BSSID (MAC地址)// 安全类型int rssi;// 信号强度// 频率// 信道宽度// 时间戳// 连接信息结构 (wifi_linked_info.h)

m0_67505153的博客 1059

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: Java设计模式 二十四 设计模式组合
下一篇: Java设计模式 三十四 桥接模式 + 策略模式
十方来财
十方来财 新星创作者: 编程框架技术领域 新星创作者: 编程框架技术领域
博客等级 码龄14年 8358粉丝 346原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十方来财

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值