首页 > 其他分享 >为大家整理最全的24种设计模式详解,必收藏

为大家整理最全的24种设计模式详解,必收藏

时间:2024-04-08 13:44:58浏览次数:18  
标签:24 依赖 原则 对象 创建 最全 接口 模式 设计模式

设计模式六大原则

 单一职责原则

  • 一个方法尽可能做一件事情,一般来说不应该让一个方法承担多个职责。

单一职责原则的英文名称是Single Responsibility Principle,简称是SRP。单一职责原则的定义是:应该有且仅有一个原因引起类的变更。

SRP的原话解释是:There should never be more than one reason for a class to change.

  • 单一职责原则提出了一个编写程序的标准,用“职责”或“变化原因”来衡量接口或设计是否优良,但是“职责”跟“变化原因”都是不好度量的,要“因地制宜”。

  • 单一职责适用于接口、类,同时也适用于方法,也就是说,一个方法尽可能做一件事情,一般来说不应该让一个方法承担多个职责。

 

里氏替换原则

  • 子类应该能替换掉它的父类。

  • 里氏替换原则为良好的继承定义了一个规范,一句简单的定义包含了4层含义。

    1、子类必须完全实现父类的方法

    2、子类可以有自己的个性。

    3、覆盖或实现父类的方法时输入参数可以被放大。

    4、覆写或实现父类的方法时输出结果可以被缩小。

  • 即如果父类的一个方法的返回值是一个类型T,子类的相同方法(重载或覆写)的返回值为S,那么里氏替换原则就要求S必须小于等于T,也就是说,要么S和T是同一个类型,要么S是T的子类。

  • 好像挺难理解的,查找了一些资料。著名技术作家Robert Martin在1996年为《C++ Reporter》写了一篇题为《The The Liskov Substitution Principle》的文章,专门介绍LSP。在Martin的文章中,他给了LSP一个解释:Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it. 意思是:“使用指向基类的指针或引用的函数,必须能够在不知道具体派生类对象类型的情况下使用它们。”在2002年,Martin在他出版的《Agile Software Development Principles Patterns and Practices》一书中,又进一步简化为:Subtypes must be substitutable for their base types。子类必须能替换掉它们的父类。这样理解起来就比较顺利了。

 

依赖倒置原则

  • 细节依赖抽象,低层依赖高层。 

  • 依赖倒置原则的原始定义是:High level modules should not depend upon low level modules.Both should depend upon abstractions.Abstractions should not depend upon details.Details should depend upon abstractions.

    包含了三层含义:

    1、高层模块不应该依赖低层模块,两者都应该依赖其抽象;

    2、抽象不应该依赖细节;

    3、细节应该依赖抽象。

  • 这一原则在Java语言中的表现就是:

    1、模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的;

    2、接口或抽象类不依赖于实现类;

    3、实现类依赖接口或抽象类。

  • 一般抽象是不变的,而具体是易变的。每个较高层次都为它所需要的服务声明一个抽象接口,较低的层次实现这些抽象接口,每个高层类都通过该抽象接口使用下一层的服务,接口属于高层,低层要实现高层的接口,因此现在是低层依赖于高层。是依赖关系倒置和接口所有权的倒置。在周围环境发生变化的时候,如果设计可以做到不怎么发生改变,那这样的设计就是好的。

 

 接口隔离原则

  • 应该尽量建立单一接口,不要建立臃肿的接口,接口应该尽量细化。

  • 接口隔离原则的原始定义是:Clients should not be forced to depend upon interfaces that they don’t use.客户端不应该依赖它不需要的接口。

  • The dependency of one class to another one should depend on the smallest possible interface.类间的依赖关系应该建立在最小的接口上。

  • 这两个定义概括起来就是,应该尽量建立单一接口,不要建立臃肿的接口,接口应该尽量细化。

接口分离的手段主要有以下两种:

  1. 委托分离,通过增加一个新的类型来委托客户的请求,隔离客户和接口的直接依赖,但会增加系统开销。

  2. 多重继承分离,通过接口多继承来实现客户需求。

     

迪米特法则

  • 一个类应该对自己需要耦合或调用的类知道得最少。

  • 迪米特法则(Law of Demeter)又叫最少知道原则(Least Knowledge Principle),1987年秋天由美国Northeastern University的Ian Holland提出,被UML的创始者之一Booch等普及。后来,因为在经典著作《 The Pragmatic Programmer》中提出而广为人知。

迪米特法则还有一个英文解释是:Only talk to your immediate friends。

一个对象应该对其他对象有最少的了解。通俗地讲,一个类应该对自己需要耦合或调用的类知道得最少。一个类公开的public属性或方法越多,修改时涉及的面也就越大,变更引起的风险扩散也就越大。在设计时需要反复衡量,是否可以减少public方法和属性,是否可以修改为private、package-private、protected等访问权限,是否可以加上final关键字等。迪米特法则要求类尽量不要对外公布太多的public方法和非静态的public变量,尽量内敛,多使用private、package-private、protected等访问权限。

 

开闭原则

  • 开闭原则要求尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来完成变化。

开闭原则的定义:

Software entities like classes,modules and functios should be open for extemsion but closed for modifications.

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

  • 一个软件产品只要在生命期内,都会发生变化,既然变化是一个既定的事实,我们应该在设计时尽量适应这些变化,以提高项目的稳定性和灵活性。开闭原则要求尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来完成变化。如何做到开闭原则:抽象、封装。

 

三大类别

建造型设计模式

在软件工程中,创建型模式是处理对象创建的设计模式,试图根据实际情况使用合适的方式创建对象。基本的对象创建方式可能会导致设计上的问题,或增加设计的复杂度。创建型模式通过以某种方式控制对象的创建来解决问题。创建型模式由两个主导思想构成。一是将系统使用的具体类封装起来,二是隐藏这些具体类的实例创建和结合的方式。创建型模式又分为对象创建型模式和类创建型模式。对象创建型模式处理对象的创建,类创建型模式处理类的创建。详细地说,对象创建型模式把对象创建的一部分推迟到另一个对象中,而类创建型模式将它对象的创建推迟到子类中。

简单工厂模式 /工厂模式

让子类来决定要创建哪个对象。

抽象工厂模式

创建多个产品族中的产品对象。

单例模式

确保某一个类只有一个实例,并且提供一个全局访问点。

建造者模式

用来创建复杂的复合对象。

原型模式

通过复制原型来创建新对象。

 

结构型设计模式

结构型模式涉及到如何组合类和对象以获得更大的结构。结构型模式采用继承机制来组合接口或实现。结构型对象模式不是对接口和实现进行组合,而是描述了如何对一些对象进行组合,从而实现新功能的一些方法。因为可以在运行时刻改变对象组合关系,所以对象组合方式具有更大的灵活性。

适配器模式

将原来不兼容的两个类融合在一起。

桥接模式

将两个能够独立变化的部分分离开来。

组合模式

将整体与局部(树形结构)进行递归组合,让客户端能够以一种的方式对其进行处理。

装饰者模式

为对象添加新功能。

外观模式

对外提供一个统一的接口用来访问子系统。

享元模式

使用对象池来减少重复对象的创建。

代理模式

控制客户端对对象的访问。

 

行为型设计模式

行为型模式主要是用于描述类或者对象是怎样交互和怎样分配职责的。它涉及到算法和对象间的职责分配,不仅描述对象或者类的模式,还描述了他们之间的通信方式,它将你的注意力从控制流转移到了对象间的关系上来。行为型类模式采用继承机制在类间分派行为,而行为型对象模式使用对象复合而不是继承。

职责链模式

将事件沿着链去处理。

命令模式

将请求封装成命令,并记录下来,能够撤销与重做。

解释器模式

定义语法,并对其进行解释。

迭代器模式

提供一种方法顺序访问一个聚合对象中的各个元素。

中介者模式

将网状结构转变为星型结构,所有行为都通过中介。

备忘录模式

保存对象的状态,在需要时进行恢复。

观察者模式

状态发生改变时通知观察者,一对多的关系。

状态模式

根据不同的状态做出不同的行为。

策略模式

封装不同的算法,算法之间能互相替换。

模板方法模式

定义一套流程模板,根据需要实现模板中的操作。

访问者模式

基于稳定数据结构,定义新的操作行为。

标签:24,依赖,原则,对象,创建,最全,接口,模式,设计模式
From: https://www.cnblogs.com/forestwolf/p/18120957

相关文章

  • 2024.4.7 训练1(rating) Codeforces Global Round 25
    https://codeforces.com/contest/1951题解参考:https://zhuanlan.zhihu.com/p/691034931A题一开始的思路比较绕,wa很多发卡了半小时才过。hansun的思路比较硬直,他在极短的时间内过了Ahansun的题解:https://codeforces.com/contest/1951/submission/255262403我的想法是分奇偶情......
  • 园子周边第3季—设计初稿预览:2024夏天穿上博客园T恤 show your code
    随着大小鼠标垫完成上架,园子周边的下一季,园子周边的重头戏,也拉开了帷幕,开始进行创意设计。周边第3季是博客园T恤,暂定主题是:「2024夏天穿上博客园T恤showyourcode」今天我们将设计的第1版初稿发出来给大家预览,欢迎大家点评、反馈、多提宝贵建议。款式1款式2款式3款式4......
  • [护网必备]知攻善防实验室蓝队应急响应工具箱v2024.4
    前言蓝队工具箱是为打造一款专业级应急响应的集成多种工具的工具集,由真实应急响应环境所用到的工具进行总结打包而来,由ChinaRan404,W啥都学,清辉等开发者编写.把项目现场中所用到的工具连同环境一同打包,并实现“可移植性”“兼容性”“使用便捷”等优点。集成模块:“常用工具......
  • DevOps已死?2024年的DevOps将如何发展
    随着我们进入2024年,DevOps也随之发生变化。新兴的技术、变化的需求和发展的方法正在重新定义有效实施DevOps实践。IDC预测显示,未来五年,支持DevOps实践的产品市场继续保持健康且快速增长,2022年-2027年的复合年增长率(CAGR)为16.1%。其主要原因是将安全纳入DevOps流程的需求日益增长,......
  • AD7237A和AD7247A双12位DA
    这份文件是关于AnalogDevices公司生产的AD7237A和AD7247A双12位DACPORTs(数字模拟转换器)的技术手册。以下是其核心内容的概要:产品概述:AD7237A/AD7247A是单芯片上的双12位DACPORTs。设计紧凑,节省空间,提高可靠性。改进的接口时间,易于与现代微处理器直接接口。支持12V至15V......
  • 浅尝设计模式
    设计模式三大类创建型模式工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式结构型模式适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式行为型模式策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备......
  • 论基于架构的软件设计方法(ABSD)及应用(系统架构师2024最新版)
    须知哈喽,大家订阅专栏后可以私信添加博主获得一对一论文,以及案例分析指导。论文可以直接背下来考试用,感谢支持 文章目录须知摘要部分:正文部分:创作指导 摘要部分:本文以某银行统一收单平台项目为例,主要论述了ABSD方法在该项目中的具体应用。2020年1月,我参与......
  • 【2024-04-07】包容泛滥
    20:00努力想得到什么东西,其实只要沉着镇静、实事求是,就可以轻易地、神不知鬼不觉地达到目的。而如果过于使劲,闹得太凶,太幼稚,太没有经验,就哭啊,抓啊,拉啊,像一个小孩扯桌布,结果一无所获,只不过把桌_上的好东西都扯到地上,永远也得不到了。              ......
  • 技术栈20240403
        后端技术栈主框架:SpringBoot+SpringFramework持久层架:MyBatis-Plus数据库连接池:AlibabaDruid多数据源:Dynamic-Datasource数据库兼容:MySQL、SQLServer、Oracle、PostgreSQL、达梦数据库、人大金仓数据库分库分表解决方案:ApacheShardingSphere权......
  • 抢先看!界面控件DevExpress WPF 2024产品路线图预览(二)
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。本文将介绍2024年DevExpressWPF第一个主要更新(v2......