设计模式之“行为型模式”(一)
来源:互联网 发布:淘宝店铺联盟和淘客 编辑:程序博客网 时间:2024/05/28 19:24
行为型模式强调的是类实体之间的相互协作关系,用来识别对象之间的常用交流模式并加以实现。行为型模式主要有十一种:观察者模式、模板方法模式、命令模式、状态模式、职责链模式、解释器模式、中介者模式、访问者模式、策略模式、备忘录模式、迭代器模式。
由于模式众多就分了两部分了两部分来介绍;第一部分:观察者模式、模板方法模式、命令模式、状态模式、职责链模式。
观察者模式
定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
一、适用时期
1、当一个对象的改变需要同时改变其他对象,而且它不知道具体有多少对象有待改变,应该考虑使用观察者模式。
2、当一个观察者模型有两个方面,其中一方面依赖于另一方面,这时使用观察者模式可以将这两者封装在独立的对象中使它们各自独立的改变和复用。
3、观察者模式所做的工作其实就是在解除耦合。让耦合的双方都依赖于抽象,而不是依赖于具体。从而使得各自的变化都不会影响另一边的变化。
二、委托
1、委托就是一种引用方法的类型,一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值。
2、委托可以看做是对函数的抽象,是函数的‘类’,委托的实例将代表一个具体的函数。
3、一个委托可以搭载多个方法,所有方法被依次换起。
4、可以使得委托对象所搭载的方法并不需要属于同一个类。
5、委托对象所搭载的方法必须具有相同的原形和形式,也就是拥有相同的参数列表和返回值类型。
模板方法模式
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定的步骤。
特点
1、模板方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势。
2、模板方法模式就是提供了一个很好的代码复用平台。
3、当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现,通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。
命令模式
状态模式 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
优点
1、比较容易地设计一个命令队列;
2、在需要的情况下,可以较容易地将命令记入日志;
3、允许接收请求的一方决定是否要否决请求;
4、可以容易地实现对请求的撤销和重做;
5、由于加进新的具体命令类不影响其他的类,因此增加新的具体命令类很容易;
6、命令模式把请求一个操作的对象与知道怎么执行一个操作的对象分割开。
1、当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
2、状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简单化。
一、优点
1、将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。
2、将特定的状态相关行为都放入一个对象中,由于所有与状态相关的代码都存在于某个子类中,所以通过定义新的子类可以很容易地增加新的状态和装换。
3、消除庞大的条件分支语句。
4、状态模式通过把各种状态转移逻辑分布到接口(State)的子类之间,来减少相互间的依赖。
二、适用条件
1、当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑适用状态模式了。
职责链模式
使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条琏,并沿着这条链传递该请求,直到有一个对象处理它为止。
优点
1、大大降低了耦合度。
2、随时地增加或修改处理一个请求的结构,增强了给对象指派职责的灵活性。
要知第二部分如何请看下篇博客,嘿嘿!
2 0
- 设计模式之行为型模式一
- 设计模式之行为型模式(一)
- 设计模式之“行为型模式”(一)
- Java设计模式之行为型模式(一)
- 设计模式之------行为型模式(一)-----中介者模式
- 设计模式之行为模式(一)
- 设计模式之——行为型模式一
- Java设计模式之行为型模式一
- 设计模式之行为型设计模式
- Java设计模式之行为型模式(命令模式)
- Java设计模式之行为型模式(迭代器模式)
- Java设计模式之行为型模式(备忘录模式)
- Java设计模式之行为型模式(观察者模式)
- Java设计模式之行为型模式(状态模式)
- Java设计模式之行为型模式(策略模式)
- Java设计模式之行为型模式(模板模式)
- Java设计模式之行为型模式(访问者模式)
- 设计模式(四):行为型模式之命令模式
- OC中的Block属性
- 红黑树
- maven+spring+springmvc+mybatis+ajax 框架下实现简单的聊天室
- android获取ip和本机的物理地址
- 新版本gem5的splash2 run.py修改版本
- 设计模式之“行为型模式”(一)
- STS下多个maven项目整合
- QT 笔记
- VS 下 解决SVN冲突--项目问题解决篇
- css居中大全
- 红黑树
- android获取当前软件版本号和版本名称
- Android中自定义View的MeasureSpec使用
- ThinkPHP3.1.3源码分析(四) Think.class.php