当前位置: 首页 > news >正文

23种设计模式详细知识点(软件设计师)

设计模式

设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。

1.创建型设计模式: ①抽象工厂(Abstract Factory)、②生成器(Builder)、③工厂方法(Factory Method)、④原型(Prototype)、⑤单例(Singleton)
2.结构型设计模式: ①适配器(Adapter)、②桥接(Bridge)、③组合(Composite)、④装饰(Decorator)、⑤外观(Facade)、⑥享元(Flyweight)、⑦代理(Proxy)
3.行为设计模式: ①责任链(Chain of Responsibility)、②命令(Command)、③解释器(Interpreter)、④迭代器(Iterator)、⑤中介者(Mediator)、⑥备忘录(Memento)、⑦观察者(Observer)、⑧状态(State)、⑨策略(Strategy)、⑩模板方法(Template Method)、⑪访问者(Visitor)

设计模式

  • 设计模式
  • A.创建型设计模式(5种)
    • 1.抽象工厂(Abstract Factory)
    • 2.生成器(Builder)
    • 3.工厂方法(Factory Method)
    • 4.原型(Prototype)
    • 5.单例(Singleton)
  • B.结构型设计模式(7种)
    • 1.适配器(Adapter)
    • 2.桥接(Bridge)
    • 3.组合(Composite)
    • 4.装饰器(Decorator)
    • 5.外观(Facade)
    • 6.享元(Flyweight)
    • 7.代理(Proxy)
  • C.行为设计模式(11种)
    • 1.责任链(Chain of Responsibility)
    • 2.命令(Command
    • 3.解释器(Interpreter)
    • 4.迭代器(Iterator)
    • 5.中介者(Mediator)
    • 6.备忘录(Memento)
    • 7.观察者(Observer)
    • 8.状态(State)
    • 9.策略(Strategy)
    • 10.模板方法(Template Method)
    • 11.访问者(Visitor)

A.创建型设计模式(5种)

处理创建对象

1.抽象工厂(Abstract Factory)

2.生成器(Builder)

3.工厂方法(Factory Method)

定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实例化延迟到其子类。

适用于:当一个类不知道它所必须创建的对象的类的时候;当一个类希望由它的子类来指定它所创建的对象的时候;当类将创建对象的职责委托给多个帮助子类中的某一个,并且希望将哪一个帮助子类是代理者这一信息局部化的时候。

4.原型(Prototype)

5.单例(Singleton)

B.结构型设计模式(7种)

类和对象的组合

1.适配器(Adapter)

2.桥接(Bridge)

3.组合(Composite)

将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。

适用于:想表示对象的部分-整体层次结构;希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

4.装饰器(Decorator)

描述了以透明围栏来支持修饰的类和对象的关系,动态地给一个对象添加一些额外的职责 ,从增加功能的角度来看,装饰器模式相比生成子类更加灵活。

适用于:在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责;处理那些可以撤销的职责;当不能采用生成子类的方式进行扩充时。

5.外观(Facade)

为子系统中的一组接口提供一个一致的界面,定义了一个高层接口, 这个接口使得这一子系统更加容易使用。

适用于:要为一个复杂子系统提供一个简单接口时,子系统往往因为不断演化而变得越来越复杂;客户程序与抽象类的实现部分之间存在着很大的依赖性;当需要构建一个层次结构的子系统时,使用Fapde模式定义子系统中每层的入口点。

6.享元(Flyweight)

运用共享技术有效地支持大量细粒度的对象。

一个应用程序使用了大量的对象;完全由于使用大量的对象,造成很大的存储开销;对象的大多数状态都可变为外部状态;如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象:应用程序不依赖于对象标识。

7.代理(Proxy)

C.行为设计模式(11种)

描述类或者对象的交互行为

1.责任链(Chain of Responsibility)

2.命令(Command

3.解释器(Interpreter)

4.迭代器(Iterator)

5.中介者(Mediator)

用一个 中介对象来封装一系列的对象交互。 中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解;一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象;想定制一个分布在多个类中的行为,而又不想生成太多的子类。欲使一个后端数据模型能够被多个前端用户界面连接,

6.备忘录(Memento)

7.观察者(Observer)

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

当一个抽象模型有两个方面,其中一个方面依赖于另一个方面,将这两者封装在独立的对象中以使它们可以各自独立地改变和复用;当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变时;当一个对象必须通知其他对象,而它又不能假定其他对象是谁,即不希望这些对象是紧耦合的。

8.状态(State)

9.策略(Strategy)

10.模板方法(Template Method)

11.访问者(Visitor)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【工控】线扫相机小结
  • Linux编程:使用 CSV 与 UnQLite 进行数据存储的比较分析
  • Java中‘==’ 和 equals()的区别
  • GeoScene Pro教程(001):软件功能产品介绍
  • Win11配置Pytorch深度学习环境(GPU版本)
  • 鸿蒙HarmonyOS实战:IPC与RPC设备内进程通信
  • 【ROS2】launch启动文件:基础
  • pyyaml:Python 中的 YAML 处理大师
  • 【数学建模】TOPSIS法(优劣解距离法)
  • JimuReport 积木报表 v1.8.0 版本发布,开源可视化报表
  • fpga图像处理实战-图像旋转
  • ctfhub-web-整数型SQL注入
  • 网站上线流程完全手册:域名、服务器与CDN
  • 牛客周赛 Round 57 ABCDFG
  • python中如何将小数显示为分数
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • Flex布局到底解决了什么问题
  • Java Agent 学习笔记
  • Mac转Windows的拯救指南
  • react-native 安卓真机环境搭建
  • SQLServer之索引简介
  • Vue官网教程学习过程中值得记录的一些事情
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 给新手的新浪微博 SDK 集成教程【一】
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 马上搞懂 GeoJSON
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 浅谈web中前端模板引擎的使用
  • 如何设计一个微型分布式架构?
  • 使用Gradle第一次构建Java程序
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 数组大概知多少
  • 原生 js 实现移动端 Touch 滑动反弹
  • 白色的风信子
  • C# - 为值类型重定义相等性
  • 组复制官方翻译九、Group Replication Technical Details
  • ​水经微图Web1.5.0版即将上线
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • ${factoryList }后面有空格不影响
  • (003)SlickEdit Unity的补全
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (ros//EnvironmentVariables)ros环境变量
  • (SpringBoot)第七章:SpringBoot日志文件
  • (多级缓存)多级缓存
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (六)Hibernate的二级缓存
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (轉)JSON.stringify 语法实例讲解