第二篇 创建型设计模式 - 灵活、解耦的创建机制

第二篇:创建型设计模式 - 灵活、解耦的创建机制

创建型设计模式关注对象的创建过程,旨在提供灵活、解耦的创建机制。以下是五种常见的创建型设计模式的详解及其应用场景。

1. 工厂方法模式详解及其应用场景

详解:
工厂方法模式定义了一个用于创建对象的接口,但让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类中进行。

在工厂方法模式中,通常包含以下角色:

  • Factory(工厂)接口:声明一个创建产品对象的方法。
  • Concrete Factory(具体工厂)类:实现工厂接口,负责创建具体的产品对象。
  • Product(产品)接口:定义产品的公共接口。
  • Concrete Product(具体产品)类:实现产品接口,是实际被创建的对象。

应用场景:
工厂方法模式适用于以下场景:

  • 当需要为客户端提供一个不依赖于具体产品类的创建对象的接口时。
  • 当系统应该使用抽象化来允许子类指定所要创建的产品对象时。

例如,在图形界面编程中,可以创建一个工厂方法来根据用户选择的形状类型(如圆形、矩形或三角形)生成相应的形状对象。

2. 抽象工厂模式详解及其应用场景

详解:
抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

在抽象工厂模式中,通常包含以下角色:

  • Abstract Factory(抽象工厂)接口:声明一组用于创建相关或依赖对象的方法。
  • Concrete Abstract Factory(具体抽象工厂)类:实现抽象工厂接口,负责创建一组具体的产品对象。
  • Product(产品)接口:定义产品的公共接口。
  • Concrete Product(具体产品)类:实现产品接口,是实际被创建的对象。

应用场景:
抽象工厂模式适用于以下场景:

  • 当一个系统需要多个产品系列,而这些系列之间存在一定的关联或者依赖关系时。
  • 当需要为客户端提供一个不依赖于具体产品系列的创建对象的接口时。

例如,在操作系统中,可以创建一个抽象工厂来生成与特定操作系统(如Windows、Mac OS或Linux)相关的GUI组件(按钮、文本框等)。

3. 单例模式详解及其应用场景

详解:
单例模式确保一个类只有一个实例,并提供一个全局访问点。该模式通常通过将构造函数设为私有并提供一个静态方法来获取唯一的实例。

单例模式的主要角色是 Singleton 类,它负责控制自己的实例化过程。

应用场景:
单例模式适用于以下场景:

  • 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
  • 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。

例如,在应用程序中,可以创建一个单例类来管理数据库连接,确保整个应用程序只使用一个数据库连接对象。

4. 建造者模式详解及其应用场景

详解:
建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

在建造者模式中,通常包含以下角色:

  • Builder(建造者)接口:声明了用于构建产品对象的所有方法。
  • Concrete Builder(具体建造者)类:实现 Builder 接口,定义并明确产品的各个部件的具体构建过程。
  • Director(导演)类:负责调用建造者的各种方法来构建产品对象。
  • Product(产品)类:定义产品的公共接口和属性。

应用场景:
建造者模式适用于以下场景:

  • 当一个对象的构建过程非常复杂,需要多个步骤,并且可能有不同的表示时。
  • 当构造过程独立于具体的构建者时。

例如,在汽车制造中,可以创建一个建造者来定义汽车的各个部件(发动机、轮胎、颜色等)的装配过程,而导演类则负责按照客户的需求调用建造者的相应方法来组装汽车。

5. 原型模式详解及其应用场景

详解:
原型模式使用原型实例指定创建对象的种类,并通过复制这些原型创建新的对象。

在原型模式中,通常包含以下角色:

  • Prototype(原型)接口:声明一个克隆自身的操作。
  • Concrete Prototype(具体原型)类:实现 Prototype 接口,提供克隆自身的具体实现。
  • Client(客户端):通过请求原型对象克隆自身来创建新对象。

应用场景:
原型模式适用于以下场景:

  • 当需要大量相似对象,而创建新对象的成本较高时。
  • 当需要深拷贝对象时。

例如,在游戏开发中,可以创建一个角色原型对象,每当需要生成一个新的角色实例时,只需克隆原型对象并进行必要的个性化设置即可。

6. 综述

通过理解和应用这些创建型设计模式,开发者可以更灵活地创建和管理对象,降低系统的耦合度,提高代码的可维护性和复用性。在后续的文章中,我们将继续探讨结构型和行为型设计模式。

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

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

相关文章

点成案例 | 如何利用细胞计数仪在单细胞测序中评估细胞

一、概述 单细胞测序技术能够用来表征异常细胞群,分析稀有细胞和细胞图谱网络,发现异质性等。由于单细胞测序巨大的应用潜力,目前此技术正在经历爆炸性增长。然而,单细胞测序需要成本和时间的大量投资。为了确保时间和资源的投资…

正确的认识 字节码文件

上一篇中认识了JVM的基本组成,我们说JVM只认识字节码文件。那么在字节码文件进入JVM之前,我们先认识了解字节码文件长什么样,我们作为工程师不需要去死扣底层的理论知识,但是我们只是需要正确的打开字节码文件 知道里面有哪些部分…

[Angular] 笔记 22:ElementRef

chatgpt: ElementRef 是 Angular 中的一个类,它用于包装对 DOM 元素的引用。它允许开发者直接访问与 Angular 组件关联的宿主 DOM 元素。 当在 Angular 中需要直接操作 DOM 元素时,可以使用 ElementRef。通常情况下,最好避免直接操作 DOM&a…

Docker启动各种服务

文章目录 1 启动MySQL2 启动maven,用于编译java程序3 容器内启动sshd,用于远程编码和调试 1 启动MySQL 守护方式运行一个容器: docker run --name mysql5.7 -e MYSQL_ROOT_PASSWORD123456 -p 3307:3306 -d mysql进入容器: dock…

Prism介绍

Prism介绍 Prism是一个框架,用于在WPF、Xamarin Forms、Uno Platform和WinUI中构建松散耦合、可维护和可测试的XAML应用程序。 设计目标 为了实现下列目的: 创建能够由模块组成的程序,这些模块能够被单独地编写、组装、部署,并且对…

【Vue3】黑马程序员 SpringBoot3+Vue3 大事件项目中 P92 抽屉样式 `:deep() Term expected` 报错的解决方法

这个报错其实不影响运行,但有些有强迫症的同学可能会很难受,以下是解决方法: 报错代码: :deep() {.avatar {width: 178px;height: 178px;display: block;}.el-upload {border: 1px dashed var(--el-border-color);border-radius…

十三:爬虫-Scrapy框架(下)

一:各文件的使用回顾 1.items的使用 items 文件主要用于定义储存爬取到的数据的数据结构,方便在爬虫和 Item Pipeline 之间传递数据。 items.pyimport scrapyclass TencentItem(scrapy.Item):# define the fields for your item here like:title scr…

jmeter函数助手-常用汇总

一.函数助手介绍 1.介绍及作用 介绍: jmeter自带的一个特性,可以通过指定的函数规则创建后进行调用该函数,在后续接口请求参数中进行调用 作用 (1)做参数化。 2.如何使用 jmeter工具栏-->工具-->函数助手…

LabVIEW在大型风电机组状态监测系统开发中的应用

LabVIEW在大型风电机组状态监测系统开发中的应用 风电作为一种清洁能源,近年来在全球范围内得到了广泛研究和开发。特别是大型风力发电机组,由于其常常位于边远地区如近海、戈壁、草原等,面临着恶劣自然环境和复杂设备运维挑战。为了提高风电…

DockerCompose - 容器编排、模板命令、compose命令、Pottainer 可视化界面管理(一文通关)

目录 一、DockerCompose 容器编排 1.1、简介 1.2、Docker-Compose 安装 1.2.1、在线安装 1.2.2、离线安装 1.3、docker-compose.yml 中的模板命令 前置说明 模板命令 1.4、DockerCompse 命令 前置说明 up down exec ps restart rm top pause暂停 和 unpause恢…

linux下的进程布局与ububtu操作系统下的proc文件夹学习笔记一

相关内容我写在公众号,写的挺详细的,欢迎关注我的公众号。请使用鼠标右键,新建标签页打开,直接点击显示参数错误,不知道怎么回事?linux下的进程布局与ububtu操作系统下的proc文件夹学习笔记 (qq.com)https:…

Windows下配置GCC(MinGW)环境

一、下载并安装MinGW 步骤1:下载MinGW安装器 前往MinGW的官方下载源,通过以下链接可以获取到最新版的MinGW安装程序: 网页地址:https://sourceforge.net/projects/mingw/files/ [MinGW 下载地址](https://sourceforge.net/proj…

69.x的平方根

给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。 示例 1&#xff1…

二级路由的配置以及注意项

二级路由 比如说LayOut组件是父亲,LayOut和ArtComp是儿子,那我们怎么给儿子配路由呢? 1、首先在router下的index.js导入组件,配置规则,详细如下 // 导入路由相关组件 import LayOut from /views/LayOut import UserC…

页面布局--Flexbox的自动边距

标题页面布局–Flexbox的自动边距 通过简单的margin:auto,我们就能实现元素的多种对齐方式。 假设我们在盒子模型里有四个元素: 先给容器使用flex布局: .container {display: flex;justify-content: flex-start;align-items: center;gap: 6…

STM32F407-14.3.10-表73具有有断路功能的互补通道OCx和OCxN的输出控制位-00x00

如上表所示,MOE0,OSSI0,CCxE0,CCxNE0时,OCx与OCxN的输出状态取决于GPIO端口上下拉状态。 ---------------------------------------------------------------------------------------------------------------------…

Windows环境安装和运行shell脚本,值得收藏!

1. 安装步骤 1.1 下载安装包 官网下载地址Git - Downloads, 我们选择 Windows 版本; CSDN下载地址:windows版本下载; 1.2 环境变量配置 在系统变量中找到Path,将git安装目录下的bin(我的安装路径&#x…

【12.29】转行小白历险记-刷算法05

242.有效的字母异位词 数组、set、map,数组是比较高效查找的 函数功能 判断字符串 s 和 t 是否互为字母异位词。如果它们包含相同的字符且每个字符出现的次数也相同,那么它们互为字母异位词。 代码逻辑 长度检查: if (s.length ! t.lengt…

【华为机试】2023年真题B卷(python)-计算最大乘积

一、题目 题目描述: 给定一个元素类型为小写字符串的数组,请计算两个没有相同字符的元素长度乘积的最大值,如果没有符合条件的两个元素,返回0。 二、输入输出 输入描述: 输入为一个半角逗号分隔的小写字符串的数组,2 &…

数字PID算法基础

数字PID是由编程语言实现的PID算法并烧录到控制芯片中,控制芯片与电机驱动连接,将PID控制算法的输出转换为PWM控制信号发送给电机驱动电路,电机驱动电路与直流电机相连并将PWM控制信号转换为具有相同占空比的PWM供电电压,通过对输…