【设计模式_七大原则_23种模式】

news/2024/11/17 3:26:34/

what is Design pattern???

是一套反复被使用的、经过分类编目的、家喻户晓的、代码设计经验的总结。
它是 软件工程的一块基石。
“ 设计模式是软件工程中一种通用的,可复用的一种解决方案,它是一种解决问题的通用模板。”

传送门Transfer door:design-pattern-intro

模式 ??Pattern??

通俗来讲就是在某种应用场景下,针对某种或某类问题的通用解决方法或方案。

Why???

是为了可提高代码的重用性、让代码更加容易被理解、提高代码的可靠性。
目标就是管理变化,提高复用

  • 代码重用性
  • 增强可读性
  • 可扩展性
  • 呈现高内聚,低耦合特性

核心

核心是封装变化


七大原则

  • 单一职责原则
  • 开放封闭原则(开闭原则)
  • 依赖倒置原则
  • 里氏替换原则
  • 合成服用原则
  • 接口隔离原则
  • 迪米特法则(最少知道原则)

单一职责原则

  • 是针对实现类的一种设计模式

  • 通俗来说,一个类只**负责一件事**,而不是变成万能的,**专一**就好。

  • 一个类所分配的职责(方法)越多,它的可复用程度越低(被复用的可能性越小),

  • –关键词:专一 做好一件事

  • 解耦,降低耦合度,增强内聚性

开放封闭原则

  • 就是说,对于扩展是开放的,对于修改是关闭的。

  • 代码如需进行修改,在不修改源码的情况下,扩展新功能,实现热插拔的效果

  • 该原则说明了 是程序有更好的可扩展性,也便于维护升级。

  • 抽象化是开闭原则的关键,要达到该原则的效果,需要使用接口与抽象类

依赖倒置原则

  • 抽象不该依赖细节,细节应该以来抽象,而也就是说,是面向接口编程,而不是实现类。
  • 细节多变化,而抽象往往稳定得多所以以抽象作为框架作为合适。抽象类/接口制定相关规范,具体的实现操作/任务交给实现类来完成。

里氏替换原则

  • 子类不应该随意继承父类的方法,继承/泛化是一种极度的高耦合表现。
  • 追求的是 在任何使用了父类 实例的地方,都可以使用子类实例来代替

合成复用原则

  • 复用时,尽量使用关联关系(聚合/组合)来实现,而不是优先考虑继承来实现。
  • 原因 :

    • 继承破坏了 类的封装性
    • 子类与父类会呈现出极度高耦合
    • 会限制复用的灵活性。

总体来说设计模式分为三大类:

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

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

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

相关资源

设计模式相关的网站

  • Wiki Page for Design Patterns - 以一种非常通用的方式检查设计模式。

  • Java Programming/Design Patterns - 一篇关于设计模式的好文章。

  • The JavaTM Tutorials - 该 Java 教程是为那些想用 Java 编程语言创建应用程序的编程人员提供的实用指南。

  • JavaTM 2 SDK, Standard Edition - JavaTM 2 SDK, Standard Edition 的官网。

相关书籍

  • Head First设计模式

  • 设计模式:可复用面向对象软件的基础

  • 图解Java多线程设计模式

  • Python设计模式 第2版

  • Learning PHP设计模式

References

  • 设计模式之七大原则-博客园
  • 设计模式的七大原则-
  • 图文详解 23 种设计模式-微信公众号
  • design-pattern-菜鸟教程www.runoob.com

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

相关文章

阿里面试,HR说我不配21K,直接翻脸.....

好家伙,这奇葩事可真是多,前两天和粉丝聊天,他说前段时间面试阿里的测开岗,最后和面试官干起来了。 我问他为什么,他说没啥,就觉得面试官太装了,我说要21K,他说太高了,说…

day15 - 使用图像金字塔进行图像拼接

在我们之前的学习过程中,使用的都是恒定大小的图像,但是在某些情况下,我们需要使用不同分辨率的(相同)图像。例如,当在图像中搜索某些东西(例如人脸)时,我们不确定对象将…

C Primer Plus第五章编程练习答案

学完C语言之后,我就去阅读《C Primer Plus》这本经典的C语言书籍,对每一章的编程练习题都做了相关的解答,仅仅代表着我个人的解答思路,如有错误,请各位大佬帮忙点出! 1.编写一个程序,把用分钟表…

vue3 ref 、unref 、toRef、toRefs

ref接受一个内部值并返回一个响应式且可变的 ref 对象。ref 对象仅有一个 .value属性,指向该内部值。 示例 const count ref(0) console.log(count.value) // 0 如果将对象分配为 ref 值,则它将被 reactive 函数处理为深层的响应式对象 unref 如果…

第四章 程序的控制结构

文章目录 第四章 程序的控制结构4.1 程序的三种控制结构4.1.1 程序流程图4.1.2 程序控制结构基础4.1.3 程序控制结构扩展 4.2 程序的多分支结构4.2.1 单分支结构:if4.2.2 二分支结构:if-else4.2.3 多分支结构:if-elif-else4.2.4 判断条件及组…

Go语言核心编程-函数、包和错误处理

第 6 章 函数、包和错误处理 6.1 为什么需要函数 6.1.1请大家完成这样一个需求: 输入两个数,再输入一个运算符(,-,*,/),得到结果.。 6.1.2使用传统的方法解决 走代码 分析一下上面代码问题 上面的写法是可以完成功能, 但是代码冗余同时不利于代码维护函数可以解…

景区上线智慧客流人数采集分析系统的根本原因

智慧客流量采集系统是一种高效、智能的客流量采集解决方案,可以实现客流量的实时监控、数据分析和预测,提高服务质量、降低管理成本、提高安全性等优势。该系统适用于各种场所,如景区、商场、服务区、机场等。 AI客流视觉监控 一、智慧客流量…

【HMS Core】【ML Kit】活体检测FAQ合集

【问题描述1】 使用示例代码集成活体检测SDK时,报错state code -7001 【解决方案】 使用示例代码前请详细阅读示例工程中的“README”文件。您需要完成以下操作后才可以运行示例代码。 在AppGallery Connect网站下载自己应用的“agconnect-services.json”文件&a…