设计模式简介

news/2024/11/9 10:09:50/

设计模式的简介与来源

设计模式(Design Pattern)代表了最佳实践,是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。

在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人(四人帮,全拼 Gang of Four)合著出版了一本名为 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素) 的书,该书首次提到了软件开发中设计模式的概念。

设计模式的六大原则(SOLID 坚硬的)

1、单一职责原则(Single Responsibility Principle)

一个类应该只有一个发生变化的原因。

不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,否则就应该把类拆分。

2、开闭原则(Open Closed Principle)

一个软件实体,如类、模块和函数应该对扩展开放,对修改关闭。

在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。

3、里氏替换原则(Liskov Substitution Principle)

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

任何基类可以出现的地方,子类一定可以出现。里氏替换原则是继承复用的基石,只有当衍生类可以替换基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。

里氏代换原则是对“开-闭”原则的补充。实现“开闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏替换原则是对实现抽象化的具体步骤的规范。里氏替换原则中,子类对父类的方法尽量不要重写和重载。因为父类代表了定义好的结构,通过这个规范的接口与外界交互,子类不应该随便破坏它。

4、接口隔离原则(Interface Segregation Principle)

客户端不应该依赖它不需要的接口。

类间的依赖关系应该建立在最小的接口上。

每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分。使用多个隔离的接口,比使用单个接口(多个接口方法集合到一个的接口)要好。

5、依赖倒置原则(Dependence Inversion Principle)

上层模块不应该依赖底层模块,它们都应该依赖于抽象。

抽象不应该依赖于细节,细节应该依赖于抽象。

面向接口编程,依赖于抽象而不依赖于具体。写代码时用到具体类时,不与具体类交互,而与具体类的上层接口交互。

6、迪米特法则,又称最少知道原则(Demeter Principle)

只与你的直接朋友交谈,不跟“陌生人”说话。

一个类对自己依赖的类知道的越少越好。无论被依赖的类多么复杂,都应该将逻辑封装在方法的内部,通过public方法提供给外部。这样当被依赖的类变化时,才能最小的影响该类。

最少知道原则的另一个表达方式是:只与直接的朋友通信。类之间只要有耦合关系,就叫朋友关系。耦合分为依赖、关联、聚合、组合等。我们称出现为成员变量、方法参数、方法返回值中的类为直接朋友。局部变量、临时变量则不是直接的朋友。我们要求陌生的类不要作为局部变量出现在类中。

合成复用原则(Composite Reuse Principle)通常也被认为是设计模式的原则之一,但并不是“六大原则”之一。

尽量使用对象组合/聚合,而不是继承关系达到软件复用的目的。

合成或聚合可以将已有对象纳入到新对象中,使之成为新对象的一部分,因此新对象可以调用已有对象的功能。

设计模式的分类

  • 按照目的:通过完成什么工作划分为创建型模式、结构型模式和行为型模式3种类型。

    1. 创建型模式:用于描述如何创建对象,将对象的创建与使用分离。GoF中提供了单例(Singleton)、原型(Prototype)、建造者(Builder)、简单工厂(Simple Factory)、工厂方法(Factory Method)、抽象工厂(Abstract Factory)共5种。
    2. 结构型模式:用于描述如何将类或者对 象结合在一起形成更大的结构,就像搭积木,可以通过 简单积木的组合形成复杂的、功能更为强大的结构。GoF中提供了适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、装饰模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)、代理模式(Proxy)共7种。
    3. 行为型模式:用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,以及怎样分配职责。GoF中提供了职责链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Memento)、观察者模式(Observer)、状态模式(State)、策略模式(Strategy)、模板方法模式(Template Method)、访问者模式(Visitor)共11种。
  • 根据范围(模式主要是用于类之间的关系还是处理对象之间的关系)可以分为类模式和对象模式2种类型。

    1. 类模式:处理类和子类关系,这些关系通过继承确立,在编译的时候就被确定了,是静态的。
    2. 对象模式:处理对象的关系,时刻变化,有动态性。
GoF的23种设计模式分类一览表
范围/目的创建型模式结构型模式行为型模式
类模式工厂方法模式(类)适配器模式解释型模式
模板方法模式
对象模式抽象工厂模式
建造者模式
原型模式
单例模式
(对象)适配器模式
桥接模式
组合模式
装饰模式
外观模式
享元模式
代理模式
职责链模式
命令模式
迭代器模式
中介者模式
备忘录模式
观察者模式
状态模式
策略模式
访问者模式

http://www.ppmy.cn/news/147127.html

相关文章

【学习日记2023.6.1】数据库隔离级别

1. 数据库隔离级别 1.1 事务 事务只是一个改变,是一些操作的集合;用专业的术语讲,他就是一个程序的执行单元;事务本身其实并不包含这4个特性,只是我们需要通过某些手段,尽可能的让这个执行单元满足这四个特…

电波钟和石英钟_有钟吗?

电波钟和石英钟 "Spring forward, fall back" - The Idiot who invented Daylight Savings Time. “春天向前,向后退” -发明夏令时的白痴。 Its time to switch from Daylight Savings Time to Standard Time. I tweeted earlier that Id gone around th…

双12有哪些宝藏数码好物值得入手、这份超值数码清单收藏好

作为一年一度的电商大促狂欢日,不知道各位小伙伴儿有没有入手哪些心仪的数码产品呢?如果确实不知道要入啥好,不妨一起来看看我为各位精心准备的这份最值得入手的数码产品清单吧,这份清单的产品最主要突出的是颜值、产品实力还有性…

Web前端105天-day14-BOOT

day14-boot第二天 目录 前言 一、工具类 1. 边框border 2. display显示 3.浮动 4.定位 5.flex布局 6.文本 二、布局 栅格系统 Grid 1.行和列 2.栅格布局中的间距 3.响应式栅格布局 总结 前言 boot第二天学习 一、工具类 1. 边框border 文档地址:Bord…

为什么像Photoshop这种如此复杂难懂的软件,可以垄断图像编辑领域20年?

作者:兰阇图片故事 对初学者来说,Photoshop确实是一款复杂的软件,如果想精通它,需要了解图像处理的方方面面,还要了解一点物理光学、数字信号处理、计算机图形学、色度学等学习起来有一定门槛的学科。每个工具都需要仔…

2008年度品牌评比及销售、市场占有率排名

2008年度品牌评比及销售、市场占有率排名 中国IT十大品牌评选方法:评选数据来源于ITC Q1-Q3 72城市100大电脑城销售数据监控得到的市场占有率指标以及105万消费者调研投票结果。其中,市场占有率指标占60%,百万消费者票选系数占40%&#xff…

通则ZLT X21 CPE使用指南

目录 设备介绍应用场景案例详细配置CPE基本配置网络实现DMZ方式实现网络互通IP Passthrough方式实现网络互通 注意事项 设备介绍 ZLT X21 是一款高性能5G室内CPE,支持NR(SA&NSA)、TDD-LTE、FDD-LTE,将蜂窝网络数据转换为WIFI和有线网口数据&#xf…

数码相机做摄像头_如何将数码相机用作网络摄像头

数码相机做摄像头 Many of the popular digital SLRs and mirrorless cameras released over the past few years now offer USB webcam support — you just need to install some extra software. We break down which manufacturers support the feature and which camera m…