责任链模式

通过前一对象记住下一个对象的引用,当有请求发生,请求将沿着这条链传递,直到有对象来处理

只需要将请求发送到责任链即可,请求会自行传递,降低对象之间的耦合

例子:三国杀中的无懈可击,循环询问是否有人使用,左轮手枪轮盘赌

优点:降低发送者与接收者的耦合,简化对象

缺点:不能保证请求一定被接收,不容易观察运行时的特征,可能会造成循环调用

命令模式

将方法的请求与实现解耦,

例子:遥控器和电视,遥控器就是命令发送者,通过具体按钮,来控制电视,电视接收到命令并执行

优点:降低系统耦合度,新命令容易添加到系统

缺点:可能会导致有过多的具体命令类

解释器模式

在软件开发中,会遇到有些问题多次重复出现,而且有一定的相似性和规律性。如果将它们归纳成一种简单的语言,那么这些问题实例将是该语言的一些句子,这样就可以用“编译原理”中的解释器模式来实现了。

例子:一些重复出现的问题可以用一种简单的语言来进行表达

优点:可拓展性好,易于实现简单的文法

缺点:使用场景较少,复杂文法难维护,会引起类的膨胀,采用递归调用方法

迭代器模式

提供一种方法顺序访问一个聚合对象中的各个元素,无须暴露该对象的内部表示

例子:遍历list

优点:支持不同方式遍历一个对象,简化了聚合类,在同一个聚合可以有多个遍历,增加新的的聚合和迭代器类都很方便

缺点:增加新的聚合类需要对应增加新的迭代器,类数成对增加

中介者模式

降低多个对象和类之间的通信复杂性,封装一系列的对象交互,不需要显示相互引用,使其耦合松散,可以独立改变交互

例子:机场调度系统,mvc框架,C控制器就是M模型和V视图的中介者

优点:降低了类的复杂度,将一对多转化为一对一,各类之间的解耦,符合迪米特原则

缺点:中介者会庞大,维护困难

备忘录模式

在不破坏封装的前提下,保存一个对象的某个状态,可以在以后将对象恢复到保存的状态。

例子:后悔药,玩游戏时候存档

优点:提供了后悔的机会,可以很方便的回到某个状态

缺点:消耗资源,如果类的成员变量过多,会占用较大的资源

观察者模式

当一个对象被修改时,自动通知依赖他的对象,并被自动更新

例子:拍卖的时候,拍卖师观察最高标价,然后通知给其他竞价者

优点:观察者和被观察者是抽象的耦合,建立一套触发机制

缺点:如果一个对象有很多直接或间接观察者,通知所有的观察者会花很多时间,如果观察者和观察目标有依赖的话可能导致系统崩溃,没有相应的机制知道被观察者是如何变化的只知道发生了变化

状态模式

类的行为基于状态改变,对象的行为依赖于它的状态,根据它的状态改变而改变它的行为

例子:打篮球时候运动员可以有正常状态,不正常状态,超常状态

优点:封装了转换规则,枚举可能的状态,可以多个环境对象共享一个状态对象,

缺点:增加系统类和对象的个数,状态模式结构与实现复杂,容易使程序结构和代码混乱,对开闭原则支持不好

空对象模式

主要为了解决空指针异常,使用在需要检查空值的地方

策略模式

一个类或算法可以在运行时更改,定义一系列算法,把他们封装起来,并使他们可以相互替换,解决多种算法时候的if_else

例子:旅行时的出游方式,选择骑自行车,坐汽车,每种方式都是一个策略

优点:算法可以自由切换,避免使用多重条件判断,拓展性良好

缺点:策略类会增多,所有策略类都需要对外暴露

模板模式

一个抽象类公开定义了执行它的方法的方式,它的子类可以按需重写方法实现,调用将以抽象类中定义的方式进行

例子:造房子,地基,框架都是一样的,后期的装修是不同的,西游记中定好的81难

优点:封装不变部分,拓展可变部分,便于维护,行为由父类控制,子类实现

缺点:不同的实现都需要一个子类实现,导致类的个数增加

访问者模式

将数据结构与数据操作分离,对一个对象结构进行很多不同的操作

例子:到朋友家做客,朋友接收访问,通过朋友的描述,对朋友的描述做一个判断

优点:符合单一原则,优秀的拓展性,灵活性

缺点:对访问者公布具体细节,违反迪米特原则,具体元素变更困难,违反了依赖倒置原则,依赖的具体类,没有依赖对象

基础学习-设计模式-行为型相关推荐

  1. 零基础学习设计模式之装饰器模式(配套视频)

    零基础学习设计模式之装饰器模式 定义 在不改变目标结构的情况下,动态的给对象增加功能 举例 如房子装修.相片加相框等,都是装饰器模式. 基本组件 抽象构件(Component)角色:定义一个抽象接口以 ...

  2. 从零开始学习Java设计模式 | 创建型模式篇:原型模式

    在本讲,我们来学习一下创建型模式里面的第四个设计模式,即原型模式. 概述 原型模式就是指用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象. 这段话读起来有点绕,是不是? ...

  3. 设计模式 - 行为型 - 模板模式学习

    现象: 设计模式 - 行为型 - 模板模式学习 介绍: 模板模式的设计思路,在抽象类中定义抽象方法的执行顺序, 并将抽象方法设定为只有子类实现,但不提供独立访问的方法 只能通过已经被安排好的定义方法去 ...

  4. 从零开始学习Java设计模式 | 创建型模式篇:建造者模式

    在本讲,我们来学习一下创建型模式里面的最后一个设计模式,即建造者模式. 概述 建造者模式是指将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示. 读完这句话之后,我估计很多人都已经懵 ...

  5. 从零开始学习Java设计模式 | 创建型模式篇:抽象工厂模式

    在本讲,我们来学习一下创建型模式里面的第三个设计模式,即抽象工厂模式. 前言 前面介绍的工厂方法模式中考虑的是一类产品,如畜牧场只养动物.电视机厂只生产电视机(不生产空调.冰箱等其它的电器).计算机学 ...

  6. Java基础篇--设计模式

    目录 前言 设计模式 创建型模式 单例模式 工厂方法模式 抽象工厂模式 建造者模式 原型模式 结构型模式 适配器模式 桥接模式 组合模式 装饰模式 外观模式 亨元模式 代理模式 行为型模式: 访问者模 ...

  7. java三板斧_JAVA基础学习 三板斧

    JAVA基础学习 -1 三板斧 1. 引子 最近因为工作需要,开始学习JAVA,我之前常用的编程语言是C,C#,C++,基本没有用JAVA,JAVA需要从基础开始学习了. JAVA是从C++优化而来: ...

  8. 七大设计原则与设计模式(创建型模式、结构型模式、行为型模式)

    七大设计原则 开闭原则.依赖倒置原则.单一职责原则.接口隔离原则.迪米特法则(最少知道原则).里氏替换原则.合成 (组合).聚合复用原则 开闭原则 定义: 一个软件实体如类.模块和函数应该对扩展开放, ...

  9. 【学习设计模式9】兼容扩展坞—适配器模式

    上篇: [学习设计模式8]组装流水线--建造者模式_Aiky哇的博客-CSDN博客上篇:[学习设计模式7]复制粘贴就得了--原型模式_Aiky哇的博客-CSDN博客那么有没有一种方法可以名正言顺的复制 ...

最新文章

  1. 轻松上云系列之一:本地数据迁移上云
  2. Openfire3.9.3源代码导入eclipse中开发配置指南
  3. python通过指定网卡发包_Python 使用指定的网卡发送HTTP请求的实例
  4. npm install时报平台不兼容Unsupported platform for xxx的解决办法:npm install -f强制安装(centos7下安装vite2 vue依赖时出现这个问题)
  5. Quartus ii与Modelsim-altera 6.5b联调前仿真
  6. ubuntu终端切换快捷键
  7. ajax.ajaxmethod无效,jQuery Ajax调用httpget webmethod(C#)无效
  8. Mybatis+mysql动态分页查询数据案例——Mybatis的配置文件(mybatis-config.xml)
  9. 计算机黑屏时间,如何在计算机上设置黑屏时间
  10. 在.NET项目中使用PostSharp,使用MemoryCache实现缓存的处理
  11. WiFi音箱在国内普及需解决的三点
  12. ADS添加路由失败的处理办法
  13. 如何用计算机判断直角三角形,三角形角度(直角三角形懒人计算器)
  14. mysql拼图游戏代码_HTML+Javascript制作拼图小游戏详解(二)
  15. 机器学习专有名词归纳
  16. Android播放M3U8格式视频失败
  17. [蓝桥杯][2019年第十届真题]-----外卖店优先级
  18. 盛元广通医院实验室设备预约管理系统
  19. c语言程序2000行代码,C语言教务管理系统2000行代码
  20. win10软件拒绝访问删不掉_win10结束进程时拒绝访问的处理办法

热门文章

  1. C语言编程练习 1.按如下函数原型编写程序,用一个整型数组feedback保存调查的40个反馈意见。用函数编程计算反馈意见的平均数(Mean)、中位数(Median)和众数(Mode
  2. 车联网2022上半年“十四五”规划大盘点
  3. CF223B Two Strings
  4. 了解报表开发证书——FCRP
  5. Mesos-软件源方式安装配置说明
  6. python对文件夹里所有压缩文件zip解压
  7. 数据脱口秀 | 从小扎到盖茨,哪位科技大佬最可能黑化为大反派?
  8. cad位移怎么使用?
  9. 一维FDTD电磁波仿真
  10. eNSP实验 - 交换机和常用命令