软考常考的四种设计模式

  • 1、观察者模式
    • 1. 定义
    • 2. 类型
    • 3. 别名
    • 4. 角色
    • 5. 类图
  • 2、桥接模式
    • 1. 定义
    • 2. 类型
    • 3. 角色
    • 4. 类图
  • 3、访问者模式
    • 1. 定义
    • 2. 类型
    • 3. 角色
    • 4. 类图
  • 4、策略模式
    • 1. 定义
    • 2. 类型
    • 3. 角色
    • 4. 类图
  • 5、参考

1、观察者模式

1. 定义

观察者模式(Observer Pattern): 定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。

2. 类型

观察者模式是一种对象行为型模式。

3. 别名

观察者模式的别名包括发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。

4. 角色

  • Subject(目标):被观察者,它是指被观察的对象。 从类图中可以看到,类中有一个用来存放观察者对象的Vector 容器(之所以使用Vector而不使用List,是因为多线程操作时,Vector在是安全的,而List则是不安全的),这个Vector容器是被观察者类的核心,另外还有三个方法:attach方法是向这个容器中添加观察者对象;detach方法是从容器中移除观察者对象;notify方法是依次调用观察者对象的对应方法。这个角色可以是接口,也可以是抽象类或者具体的类,因为很多情况下会与其他的模式混用,所以使用抽象类的情况比较多。
  • ConcreteSubject(具体目标):具体目标是目标类的子类,通常它包含经常发生改变的数据,当它的状态发生改变时,向它的各个观察者发出通知。同时它还实现了在目标类中定义的抽象业务逻辑方法(如果有的话)。如果无须扩展目标类,则具体目标类可以省略。
  • Observer(观察者):观察者将对观察目标的改变做出反应,观察者一般定义为接口,该接口声明了更新数据的方法 update(),因此又称为抽象观察者。
  • ConcreteObserver(具体观察者):在具体观察者中维护一个指向具体目标对象的引用,它存储具体观察者的有关状态,这些状态需要和具体目标的状态保持一致;它实现了在抽象观察者 Observer 中定义的 update()方法。通常在实现时,可以调用具体目标类的 attach() 方法将自己添加到目标类的集合中或通过 detach() 方法将自己从目标类的集合中删除。

5. 类图

2、桥接模式

1. 定义

桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interfce)模式。

2. 类型

桥接模式是一种结构型模式。

3. 角色

  • 抽象化(Abstraction)角色:抽象化给出的定义,并保存一个对实现化对象的引用。
  • 修正抽象化(RefinedAbstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义。
  • 实现化(Implementor)角色:这个角色给出实现化角色的接口,但不给出具体的实现。必须指出的是,这个接口不一定和抽象化角色的接口定义相同,实际上,这两个接口可以非常不一样。实现化角色应当只给出底层操作,而抽象化角色应当只给出基于底层操作的更高一层的操作。
  • 具体实现化(ConcreteImplementor)角色:这个角色给出实现化角色接口的具体实现。

4. 类图

3、访问者模式

1. 定义

访问者模式提供一个作用于某种对象结构上的各元素的操作方式,可以使我们在不改变元素结构的前提下,定义作用于元素的新操作。

2. 类型

访问者模式(Visitor Pattern)是对象行为型(Behavioral)设计模式

3. 角色

  • Vistor(抽象访问者):为该对象结构中具体元素角色声明一个访问操作接口。

  • ConcreteVisitor(具体访问者):每个具体访问者都实现了Vistor中定义的操作。

  • Element(抽象元素):定义了一个accept操作,以Visitor作为参数。

  • ConcreteElement(具体元素):实现了Element中的accept()方法,调用Vistor的访问方法以便完成对一个元素的操作。

  • ObjectStructure(对象结构):可以是组合模式,也可以是集合;能够枚举它包含的元素;提供一个接口,允许Vistor访问它的元素。

4. 类图

4、策略模式

1. 定义

策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。

2. 类型

策略模式是一种对象行为型模式。

3. 角色

  • Context: 环境类
  • Strategy: 抽象策略类
  • ConcreteStrategy: 具体策略类

4. 类图

5、参考

  1. https://juejin.cn/post/6844904100459446285
  2. https://zhuanlan.zhihu.com/p/58903776
  3. https://www.jianshu.com/p/cd17bae4e949
  4. https://design-patterns.readthedocs.io/zh_CN/latest/behavioral_patterns/strategy.html

软考常考的四种设计模式相关推荐

  1. 国家开放大学计算机基础应用型题一,国家开放大学(电大)《计算机应用基础》上机网考常考操作题及步骤...

    国家开放大学(电大)<计算机应用基础>上 机网考常考操作题及步骤 上机常考典型操作题及操作步骤 Windows xp 操作系统 (一)请把本机设置为允许他人从另外的机器上进行远程桌面连接. ...

  2. 从魔兽看四种设计模式(转载)

    首开一篇,cnblogms很强大,就在这安居了, 以后要养成多写bolg的习惯, 多与别人交流... 以下为网上转载.从魔兽看四种设计模式(转载) 前段时间看到有人用魔兽来解释设计模式,感觉很有意思, ...

  3. 软文发布实用技巧:软文发布常见的四种形式

    软文发布常见的四种形式 一.随处可见的轰炸形式 过年四月就是在各个地方各个时间段都投放广告,这种形式虽然显得有些杂乱无章,但是 由于媒体投放量比较大,所以人们接受信息也会相对较多,所以在一定程度上也达 ...

  4. 软考常考知识点整理-项目生命周期、信息系统生命周期与产品生命周期

    (1)项目生命周期     项目要交付特定的产品.成果和完成特定的服务,项目生命周期定义项目的开始与结束,也明确了在项目结束时所包括(或不包括)的移交行为.     项目的规模和复杂性各不相同,但不论 ...

  5. 软考常考知识点整理-项目进度计划与项目进度管理计划

    项目进度计划     项目进度计划是进度模型的输出,展示活动之间的相互关联,以及计划日期.持续时间.里程碑和所需资源.项目进度计划中至少要包括每个活动的计划开始日期与计划结束日期.即使在早期阶段就进行 ...

  6. 软考常考知识点整理-项目镀金和范围蔓延

    项目范围管理包括确保项目做且只做所需的全部工作,以成功完成项目的各个过程.管理项目范围主要在于定义和控制哪些工作应该包括在项目内,哪些不应该包括在项目内. 范围蔓延,又叫范围潜变,是指未得到控制的变更 ...

  7. 软考常考知识点整理-V型生命周期模型

    此知识点要注意,<信息系统项目管理师教程(第三版)p150>与<系统集成项目管理工程师教程(第二版)p209>中关于V模型的介绍不一致. V模型是在快速应用开发模型基础上演变而 ...

  8. java弱引用弱点_终于有人把Java强、软、弱、虚四种引用知识点整理出来了

    强引用就是指在程序代码之中普遍存在的,指创建一个对象并把这个对象赋给一个引用变量,并没有像其它三种引用一样有一个就具体的类来描述.对于强引用对象,即使内存不足,JVM宁愿抛出OutOfMemoryEr ...

  9. access筛选末位数字为1或5_数字鸿沟理论不会用?北大必考常考,我们以快手短视频为例...

    href="http://mp.weixin.qq.com/s?__biz=MzI0OTA4MDk3Nw==&mid=2651538322&idx=1&sn=6a82 ...

最新文章

  1. 谷歌前CEO:美国科技优势面临最危险时刻
  2. Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function解决方法
  3. day13 内置函数一
  4. Python3算法基础练习:编程100例(1~5)
  5. VL09 不能取消来自分散系统的货物移动
  6. Java Generics and Collections-2.1
  7. 大脚导入配置选择哪个文件_有史以来最全的 IntelliJ IDEA 配置图解
  8. 栈溢出笔记1.6 地址问题(1)
  9. 安卓中的布局属性详解
  10. 外点罚函数matlab程序_关于图像轮廓识别的程序实现
  11. Hadoop技术原理与应用
  12. 阿里云上构建php mysql_手把手教你如何在阿里云服务器上搭建PHP环境?
  13. dp协议学习----2、SST模式下的TU的计算
  14. 从Transformer到ViT再到MAE
  15. 什么是现汇买入价、现钞买入价、卖…
  16. cvpr论文什么级别(cvpr论文什么级别,有奖金吗)
  17. 小米mix2android o升级,小米MIX2升级Android 8.0 全面屏手势操作将一同推送
  18. pythonocc_pythonocc
  19. 英语口语智能测试软件,口语易英语口语智能评测训系统
  20. 智能汽车时代,“BATH”的跨界姿势与逻辑

热门文章

  1. R语言计算并合并各物种的OTU数量
  2. UnityAR-平面检测
  3. azul zing_Azul Systems CTO讨论Lambda并提高Java社区的投入
  4. winmerge多个文件夹生成html,功能强大的文件、文件夹比对工具-WinMerge使用教程
  5. Routing and Switching Essentials ( 版本 6.00) - RSE 6.0 Chapter 5 Exam
  6. 人脸识别——基于CNN的模型实现
  7. 数组,异质结构以及指针的详解
  8. USART HMI智能串口屏与单片机双向通讯
  9. timesat数据如何读取_判二手车调表车另类方法。如何利用OBD读取可靠数据(技术类)...
  10. python 如何将视频文件的语音转换为文字