设计模式简介

news2024/9/24 11:22:38

一、设计模式简介

        编写软件过程中,程序员面临着来自耦合性,内聚性 以及可维护性,可扩展性,重用性,灵活性等多方面的挑战,设计模式是为了让程序(软件),具有更好的:

                1、代码重用性(即:相同功能的代码,不用多次编写)

                2、可读性(即:编程规范性,便于其他程序员的阅读和理解)

                3、可扩展性(即:当需要增加新的功能时,非常方便,称为可维护性)

                4、可靠性(即:当我们增加新的功能后,对原来的功能没有影响)

                5、使程序呈现高内聚(功能模块内部联系非常紧密),低耦合(功能模块之间联系非常稀疏)的特性

二、设计模式原则

1.单一职责原则

        类的职责单一、对外值提供一种功能,而引起类变化的原因应该也只有一个

2.接口隔离原则(Interface Segregation Principle)

        为了达到一个类对另一个的依赖应该建立在最小的接口上这个要求,我们将原来的一个大的接口分散成几个小的接口

3.依赖倒转原则

        在开发过程中尽可能的依赖抽象层(接口/抽象类)而不是依赖实现层(类)。

4.里氏替换原则

        任何抽象类出现的地方都可以使用实现类代替

        核心内容:继承必须确保超类所拥有的性质在子类中仍然成立,也就是说在继承时,子类中不要去重写父类中已实现的方法。

简单用一句话来说就是:继承不重写、重载,父类出现的地方子类一定能出现,尽可能变继承为依赖。

5.开闭原则

        当软件\类需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。

6.迪米特法则

        迪米特法则(Demeter Principle)又叫最少知道原则,即一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类不管多么复杂,都尽可能将逻辑封装在类的内部。对外除了提供的public方法,不对外泄露任何信息.

        迪米特法则的核心是降低类之间的耦合;但是注意:由于每个类都减少了不必要的依赖,因此迪米特法则只是要求降低类间(对象间)耦合关系,并不是要求完全没有依赖关系。

7.合成复用原则(Composite Reuse Principle)

        原则是尽量使用合成/聚合/组合的方式,而不是使用继承

三、设计模式分类

1.创建型模式(创建对象)

创建型模式共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

创建型设计模式的一些例子如下:

        抽象工厂模式,提供一个创建相关或依赖对象的接口,而不指定对象的具体类。

        工厂方法模式,允许一个类的实例化推迟到子类中进行。

        生成器模式,将一个复杂对象的创建与它的表示分离,使同样的创建过程可以创建不同的表示。

        原型模式,使用原型实例指定要创建的对象类型,通过复制原型创建新的对象。

        单例模式,保证一个类只有一个实例,并且提供对这个实例的全局访问方式。

2.结构性模式(软件结构)

共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

        适配器模式:将一个物件的界面'转接'成当事人预期的样子。

        外观模式:对于已有的界面建立一个简化的界面以简化使用共通任务。

        享元模式:通过共享以便有效的支持大量小颗粒对象。

        代理模式:为其他对象提供一个代理以控制对这个对象的访问。

        桥接模式:将一个抽象与实现解耦,以便两者可以独立的变化。

        组合模式:树状结构的物件,每个物件有相同的界面

        修饰模式:对一个执行的类别,若使用继承方式加上新功能可能会新类别的数量呈指数型地增加,可使用此模式来解决。

3.行为型模式(功能方法的角度)

共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

        责任链模式:处理命令物件或将之传到下一个可以处理的物件。

        命令模式:命令物件将动作及参数封装起来。

        解释器模式:实作特制化的编程语言以解决一系列特殊的问题。

        迭代器模式:迭代器用于存取包含器中元素而不用透露底层实作的方式。

        观察者模式:亦即发行/订阅或事件聆听者。物件注册去聆听由另一个物作所引发的事件。

        备忘录模式:使一个物件还原到前一个状态的能力(rollback)。

        状态模式:在执行可以部分改变物件的一种方法。

        策略模式:在执行时依需求而选择算法。

        访问者模式: 一种从物件中取出算法的方式。

        模板方法模式:描述一个程式的骨架。

        调停者模式:对子系统中的界面集面提供一个统一的界面。

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

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

相关文章

04SpringCloudAlibaba服务注册中心—Consul

目录 Consul简介 Consul是什么What is Consul? | Consul by HashiCorp Consul能做什么 Consul下载:Downloads | Consul by HashiCorp Consul使用:Spring Cloud Consul 中文文档 参考手册 中文版 安装并运行Consul 1、官网安装说明:In…

开发板测试手册——系统启动、文件传送操作步骤详解(1)

目 录 前 言 4 1 评估板快速测试 5 1.1 系统启动测试 5 1.2 文件传送测试 11 1.2.1 通过 Linux 系统启动卡 11 1.2.2 通过 OpenSSH 12 1.3 LED 测试 15 1.4 KEY 测试 15 1.5 DDR 读写测试 16 1.6 SD 卡读写测试 17 1.7 eMMC 读写测试 18 前 言 本指导文档适用开发…

2022 CSDN年度报告已出炉

2022年已过,我们迎来了2023年,那么在2022年,你在CSDN平台都做了些什么,收获了什么呢?2022 CSDN年度报告已出炉,来看看你的2022年度报告吧。 点此查看2022年度报告 或扫码查看你的2022 CSDN年度报告哦&…

23种设计模式(三)——策略模式【组件协作】

文章目录意图什么时候使用策略真实世界类比策略模式的实现策略模式的优缺点亦称:Strategy 意图 定义了一组策略,分别在不同类中封装起来,每种策略都可以根据当前场景相互替换,从而使策略的变化可以独立于操作者。比如我们要去某个…

Type-challenges: tuple to object / union

type-challenges/README.zh-CN.md at main type-challenges/type-challenges GitHub https://github.com/TIMPICKLE/type-challenges/blob/main/questions/00010-medium-tuple-to-union/README.zh-CN.md lets do it , mate! 首先概念澄清: JS: con…

TKE 注册节点,IDC 轻量云原生上云的最佳路径

林顺利,腾讯云原生产品经理,负责分布式云产品迭代和注册节点客户扩展,专注于云原生混合云新形态的推广实践。 背景 企业在持续业务运维过程中,感受到腾讯云 TKE 带来的便捷性和极致的使用体验,将新业务的发布以及老业…

回答问题】ChatGPT上线了!给我推荐20个比较流行的图像全景分割模型

给我推荐20个比较流行的图像全景分割模型 好的,这是 20 个比较流行的图像全景分割模型:DeepLabv3 PSPNet FCN U-Net Mask R-CNN UNet SegNet ENet ICNet ENet GCN DANet BiSeNet DenseASPP DenseASPPv2 DenseASPPv3 DenseASPPv4 DenseASPPv5 DenseASPPv…

Redis数据持久化

数据持久化 RDB (Redis DataBase) 在指定的时间间隔内将内除中的数据集快照写入磁盘,即Snapshot快照。 备份如何执行 Redis会单独创建(fork)一个子进程来执行持久化,会先将数据写入到一个临时文件,待持久化过程结束…

【嵌入式Linux环境搭建-02】虚拟机安装Ubuntu20系统

虚拟机安装 Ubuntu 系统 前面用的VMware15.5,安装完Ubuntu20.04报错,试了以下方法都不行。 建议直接安装VMware16.2,步骤和上面一样 报错 解决:VMware Workstation 与 Device/Credential Guard 不兼容_山顶夕景的博客-CSDN博客…

JS阻止事件冒泡的方法*基础原理与运用

目录 事件冒泡html布局css样式代码 非标准写法&#xff1a;IE6-8 利用事件对象cancelBubble属性 标准写法&#xff1a;利用事件对象里面的stopPropagation()方法 下拉菜单 操作方法 事件冒泡html布局css样式代码 首先创建三个嵌套的方块&#xff0c;便于案例分析 <div…

NewSQL如何解决高可用、分片?

1 什么是New SQL&#xff1f; 无论你其他方面做的比Old SQL好再多&#xff0c;SQL和ACID是刚需&#xff0c;这个命你革不掉的。你不支持SQL&#xff0c;就不会有多少人用。所以近几年很多之前不支持SQL的数据库&#xff0c;都开始支持SQL了&#xff0c;甚至于像Spark、Flink这…

自然语言处理 第十章 信息抽取 复习

信息抽取信息抽取复习重点&#xff1a;信息抽取概述从任务内容分为&#xff1a;从处理文档类型分为&#xff1a;从发展时间和处理文档分为&#xff1a;实体识别与抽取限定域命名实体识别基于规则或字典的方法 &#xff1a;规则模版&#xff08;字典&#xff09;匹配统计学习方法…

23.1、Java中的类加载器反射模块化

1.类加载器 1.1类加载 类加载的描述 当程序要使用某个类时&#xff0c;如果该类还未被加载到内存中&#xff0c;则系统会通过类的加载&#xff0c;类的连接&#xff0c;类的初始化这三个步骤来对类进行初始化。如果不出现意外情况&#xff0c;JVM将会连续完成这三个步骤&#…

spring boot 七:SpringBoot自定义配置Jackson的ObjectMapper

spring boot 七&#xff1a;SpringBoot2.5.4自定义配置Jackson的ObjectMapper 1 前言 SpringBoot底层默认使用的自动依赖注入&#xff0c;即spring-boot-autoconfigure包的META-INF下&#xff0c;存在spring.factories文件&#xff0c;里面有自动注入的jackson自动配置类。在…

[数据结构基础]栈和队列的结构及接口函数

一. 栈 1.1 栈的概念及结构 栈是一种特殊的线性表&#xff0c;其只允许在固定的一段进行插入和删除元素的操作。进行数据插入和删除的一端成为栈顶&#xff0c;另一端称为栈底。栈结构中的数据遵循先进后出原则&#xff08;LIFO&#xff1a;Last in First Out&#xff09;&am…

03 Hive概述

Hive概述1、什么是Hive2、Hive优缺点3、Hive架构原理4、Hive 和 数据库比较5、Hive计算引擎1、什么是Hive 由Facebook开源用于解决海量结构化日志的数据统计工具。 Hive是基于Hadoop的一个数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张表&#xff0c;并提供 类SQ…

如何在外籍人员子女学校和同事有效工作

香港 (Xinwengao.com) — PD Academia 的 Henry Wong 在新加坡出生长大&#xff0c;在美国接受高等教育&#xff0c;现在在美国半退休。他在中国生活了16年。他与许多西方人和中国人一起工作。他始终将自己视为东方与西方的交汇点&#xff0c;是学术界与行政部门之间的桥梁。他…

刷油漆【中等】

在一个8 \times 8 的网格中&#xff0c;一些水平的行被涂成红色&#xff0c;一些垂直的列被涂成蓝色&#xff0c;条纹是按顺序画的&#xff0c;一个接着一个。绘制条纹时它会重新绘制它所经过的所有单元格。(原理跟刷油漆一样)现在你需要确定最后一个上色的是什么颜色红色条纹是…

静态路由配置

获取未知网段的路由信息&#xff1a; 静态路由&#xff1a;由网络管理员手工配置的路由条目 动态路由&#xff1a;所有路由器上开启同一种路由协议&#xff0c;之后&#xff0c;通过路由器之间沟通&#xff0c;协商&#xff0c;最终计算生成路由条目。 静态路由的优点&#xf…

MySQL2-初识MySQL

目录 1.数据库 1.1.什么是数据库? 1.2.为什么要用数据库&#xff1f; 1.2.1.数据存储的发展史 1.2.2.文件存储的缺点 1.3.数据库分类 1.3.1.关系型数据库&#xff08;RDBMS&#xff09; 1.3.2.非关系型数据库&#xff08;了解&#xff09; 1.3.3.关系型数据库和非关系…