软考上午05设计模式-行为型
责任链模式://逐级申请请假
意图:使多个对象都有机会处理请求,避免请求的发送者和接受者有耦合关系。将这些对象连成一条链
适用:多个的对象可以处理一个请求,具体哪个处理在运行时确定
在不明确指明接收者的情况下向多个对象中的一个提交请求
可处理一个请求的对象集合应被动态指定
命令模式://电视机开关机,菜单和工具栏 多级撤销 交互式用户界面
意图:将请求封装为一个对象使得可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,支持可撤销的操作
适用:抽象出待执行的动作以参数化某对象
在不同的时刻指定、排列和执行请求
支持取消操作
支持修改日志
解释器模式:
意图:使用该表示来解释语言中的句子
适用:(1)该文法简单。(2)效率不是一个关键问题。
当有一个语言需要解释执行,并且可以将该语言中的句子表示为一个抽象语法树时
迭代器模式:
意图:提供一种方法顺序访问一个聚合对象中的各个元素,且不需要暴漏该对象的内部表示
适用:
中介者模式://老电话
意图:用一个中介对象来封装一系列的对象交互,使各对象不需要显式的引用,使耦合松散,独立地改变他们之间的交互
适用:一组对象以定义良好但是复杂的方式通信,产生的相互依赖关系结构混乱难以理解
一个对象引用其他很多对象直接通信,导致难以复用
定制一个分布在多个类中的行为,又不想产生太多子类
备忘录模式://存档
意图:在不破坏封装性的前提下捕获一个对象的内部状态,在对象之外保存这个状态。这样之后就可以恢复到这个状态
适用:必须保存一个对象在某一时刻的状态,这样以后需要的时候就可以恢复到先前状态,
观察者模式://视频网站的订阅
意图:定义对象之间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖与它的对象都会得到通知并被自动通知
适用:当一个抽象模型的两个方面,一个方面依赖于另一个方面,将这两者封装在独立的对象中,使他们可以各自独立的改变与复用
当一个对象的改变同时需要改变其他对象,且不知道具体有多少对象需要改变
当一个对象必须通知其他对象,他又不可以假定其他对象是谁,即不希望这些对象是紧耦合的
状态模式://自动贩卖机
意图:允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎改变了它的类
适用:一个对象的行为决定于它的状态,并且它必须时刻运行根据状态改变它的行为
一个操作中含有庞大的分支语句。且这些分支依赖于该对象的状态,这个状态常用一个或多个枚举常量表示
策略模式://算法互相替换,打折促销
意图:定义一系列算法,把他们一个个封装起来。并且使他们可以相互替换。使得算法可以独立于使用他们的客户而变化
适用:许多相关的类只是行为有异
需要一个算法的不同变体
模板方法模式:
意图:定义一个操作中的算法骨架,将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
适用:一次性实现一个算法的不变部分,将可变的部分留给子类实现
子类中的公共算法提取出来集中到一个父类中,以免代码重复
访问者模式://关键词accept
意图:表示一个作用于某对象结构中各元素的操作,他允许在不改变各元素的类的前提下定义作用于这些元素的新操作
适用:一个对象结构包含很多类对象,有不同的接口,而用户想对这些对象实现一些依赖于具体类的操作
需要对一个对象结构中的对象进行很多不同的且不相干的操作

浙公网安备 33010602011771号