创建型设计模式

创建型设计模式

    • 一、六大基本原则
      • 1、单一职责原则
      • 2、开闭原则
      • 3、里氏代换原则
      • 4、依赖倒置原则
      • 5、接口隔离原则
      • 6、迪米特法则
    • 二、设计模式总览
    • 三、具体代码实现
      • 工厂设计模式
      • 抽象工厂设计模式
      • 建造者设计模式
      • 原型设计模式
      • 单例设计模式
  • 五种设计模式的主要代码以及实现包

一、六大基本原则

1、单一职责原则

一个类只能有一个职责。一个类(大到模块,小到方法)承担的职责越多,它被复用的可能性就越小,而且一个类承担的职责过多,就相当于将这些职责耦合在一起,当其中一个职责变化时,可能会影响其他职责的运作,因此要将这些职责进行分离,将不同的职责封装在不同的类中。

2、开闭原则

一个软件实体应该对扩展开放,对修改关闭。即软件实体尽量在不修改原有代码的情况下进行扩展。

3、里氏代换原则

所有引用父类的地方必须能透明地使用其子类的对象。

4、依赖倒置原则

高层模块不应该依赖低层模块,抽象不应该依赖细节,细节应该依赖抽象。要面向接口编程,不要面向实现编程。

5、接口隔离原则

使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。当一个接口太大时,我们需要考虑将它分离成一个更小的接口。

6、迪米特法则

尽量减少对象之间的交互,如果两个对象之间不必彼此直接通信,那么这两个对象就不应当发生任何直接的相互作用,如果其中一个对象需要调用另一个对象的某一个方法的话,可以通过第三者转发这个调用。

二、设计模式总览

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、具体代码实现

工厂设计模式

⼯⼚模式⼜称⼯⼚⽅法模式,是⼀种创建型设计模式,其在⽗类中提供⼀个创建对象的⽅法, 允许⼦类 决定实例化对象的类型。

这种设计模式也是 Java开发中最常⻅的⼀种模式,它的主要意图是定义⼀个 创建对象的接⼝,让其⼦ 类⾃⼰决定实例化哪⼀个⼯⼚类,⼯⼚模式使其创建过程延迟到⼦类进⾏。

简单说就是为了提供代码结构的扩展性,屏蔽每⼀个功能类中的具体实现逻辑。让外部可以更加简单的 只是知道调⽤即可,同时,这也是去掉众多ifelse的⽅式。

当然这可能也有⼀些缺点,⽐如需要实现 的类⾮常多,如何去维护,怎样减低开发成本。但这些问题都可以在后续的设计模式结合使⽤中,逐步 降低。

抽象工厂设计模式

抽象工厂设计模式(Abstract Factory Design Pattern)是一种创建型设计模式,旨在提供一个接口用于创建相关或依赖对象的家族,而无需明确指定它们的具体类。这种模式属于工厂模式的一种扩展,它通过提供一个接口来创建一系列相关或相互依赖的对象,而不需要指定这些对象的具体类。

建造者设计模式

建造者模式所完成的内容就是通过将多个简单对象通过⼀步步的组装构建出⼀个复杂对象的过程。

它的主要目的是将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。

原型设计模式

原型模式主要解决的问题就是创建重复对象。这部分对象内容本身比较复杂,生成过程耗时较长,因此使用clone()方法节省时间

这种场景经常出现在我们身边,只不过很少用到自己的开发中,就像CV复制代码,类中的clone()方法。

单例设计模式

单例模式是整个设计中最简单的模式之一。

单例模式主要解决的是哪怕多线程同时访问,一个类也只能有一个实例。

本节介绍7种单例模式的实现:懒汉模式(线程不安全)、懒汉模式(线程安全)、饿汉模式(线程安全)、使用类的内部类(线程安全)、双重锁校验(线程安全)、CAS[AtomicReference](线程安全)、Effective Java作者推荐的枚举单例(线程安全)。

五种设计模式的主要代码以及实现包

代码实现在文章顶部显示,由于代码量较大,再次仅贴出代码目录以及部分代码,不过多占用文章篇幅。
在这里插入图片描述
抽象工厂:

public class Client {private Button button;private Window window;public Client(GUIFactory factory){button = factory.createButton();window = factory.createWindow();}public void renderUI(){button.render();window.render();}public static void main(String[] args) {GUIFactory factory;String name = System.getProperty("os.name").toLowerCase();if(name.contains("windows")){factory = new WindowsGUIFactory();}else{factory = new MacOSGUIFactory();}Client client = new Client(factory);client.renderUI();}
}

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

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

相关文章

前端常用的工具网站

前端常用的工具网站🔖 文章目录 前端常用的工具网站🔖1. 图片在线压缩2. iconfont--矢量图标3. JSON在线格式化4. EMOJIALL--表情符号5. removebg--去除图片背景6. FREE API--免费API接口7. Lorem picsum --随机图片8.UU在线工具 -- 聚合工具 1. 图片在线…

STM32实现三个小灯亮

led.c #include"led.h"void Led_Init(void) {GPIO_InitTypeDef GPIO_VALUE; //???RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//???GPIO_VALUE.GPIO_ModeGPIO_Mode_Out_PP;//???? ????GPIO_VALUE.GPIO_PinGPIO_Pin_1|GPIO_Pin_2|GPIO_P…

【Node JS】node.js安装步骤详解

一、安装Node.js 1.下载 Node.js官网下载 根据自身系统下载对应的安装包(我这里为Windows11 64位,故选择下载第一个安装包) 2.安装 双击安装包,点击Next,勾选使用许可协议,点击Next,选择安装位…

Adobe InDesign各版本安装指南

下载链接 https://pan.baidu.com/s/1VWGKDUijTTETU9sVWFjCtg?pwd0531 #2024版本 1.鼠标右击【InCopy2024(64bit)】压缩包(win11及以上系统需先点击“显示更多选项”)【解压到 InCopy2024(64bit)】。 2.打开解压后的文件夹,鼠标右击【Setup…

蓝桥村的神秘农田

蓝桥村的神秘农田 问题描述 小蓝是蓝桥村的村长,他拥有一块神秘的农田。这块农田的奇特之处在于,每年可以种植两种作物,分别称为 "瑶瑶豆" 和 "坤坤果"。小蓝需要为每种作物选择一个整数的生长指数,瑶瑶豆的…

ROS2_Control官方资料+运动控制

Getting Started — ROS2_Control: Rolling Dec 2023 documentation Getting Started Edit on GitHub Youre reading the documentation for a development version. For the latest released version, please have a look at Iron. Getting Started Installation Binar…

python实现元旦多种炫酷高级倒计时_附源码【第20篇—python过元旦】

文章目录 🌍python实现元旦倒计时 — 初级(控制台)⛅实现效果🌋实现源码🌜源码讲解 🌍python实现元旦倒计时 — 中级(精美动态图)⛅实现效果🌋实现源码🌜源码讲解 🌍python实现元旦倒计时 — 高…

P73 bert奇闻

同一个字,前后接的不同,词汇的意思不同,通过bert 之后输出的向量也不一样。 bert 输出后的向量包含上下文的信息。 比如 吃苹果 和苹果电脑中的 果,向量不一样。 DNA 分类 把DNA 的 A T C G 用 we you he she 表示,然…

双向数据绑定是什么

一、什么是双向绑定 我们先从单向绑定切入单向绑定非常简单,就是把Model绑定到View,当我们用JavaScript代码更新Model时,View就会自动更新双向绑定就很容易联想到了,在单向绑定的基础上,用户更新了View,Mo…

淘宝商品详情页全页数据抓取API(商品价格库存销量商品主图)

淘宝/天猫获得淘宝app商品详情原数据 API 返回值说明 item_get_app-获得淘宝app商品详情原数据 taobao.item_get_app 测试地址 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接…

OSI 七层参考模型及TCP/IP 四层模型

OSI 七层参考模型 七层模型,亦称 OSI ( Open System Interconnection )参考模型,即开放式系统互联。参考模型是国际标准化组织(ISO )制定的一个用于计算机或通信系统间互联的标准体系,一般称为…

【SPI和API有什么区别】

✅什么是SPI,和API有什么区别 ✅典型解析🟢拓展知识仓🟢如何定义一个SPI🟢SPI的实现原理 ✅SPI的应用场景SpringDubbo ✅典型解析 Java 中区分 API和 SPI,通俗的进: API和 SPI 都是相对的概念,他们的差别只…