行为型模式1组包含了观察者模式、模板方法模式、命令模式、状态模式和职责链模式。
行为型模式:在软件工程中,行为型设计模式为设计模式的一种类型,用来识别对象之间的常用交流模式并加以实现。如此,可以在交流时增强灵活性。 --维基百科
简而言之,行为型模式涉及了各种类之间的交互关系(对比:结构型模式涉及的是类之间的结构与组合)。
1.观察者模式:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有观察者对象,使它们能够自主更新自己。
1.1 UML图:
1.2 模式解析:当主题对象状态发生改变(向观察者发起通知)时,被主题对象引用的具体观察者执行相应的方法。
1.3 模式适用情况:当一个对象(主题对象)的改变需要同时改变其他对象,而且它不知道有多少对象有待改变时,考虑使用该模式。
2.模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
2.1 UML图:
2.2 模式解析:多各类中有部分相同的结构,将这些相同的结构放到父类中,而子类中只写那些不同的内容
2.3 模式适用情况:要完成某一细节层次一致的一个过程或一系列步骤,但个别步骤在更详细的层次上的实现不同时使用。
3.职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并且沿着这条链传递该请求,直到有对象处理请求为止。
3.1 UML图:
3.2 模式解析:在Handler类中记录下每个具体对象的后继者,而在每个对象中写下执行后继者方法的方法。
*这个模式与装饰模式很相似,区别在于“执行其他类的方法的代码位置不同,本模式是在具体处理者类中写出,而装饰者模式则是在装饰类中。
3.3 模式适用情况:
1、有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定;
2、在不明确指定接收者的情况下,向多个对象中的一个提交一个请求;
3、处理一个请求的对象集合应被动态指定。
(由于书中没有提及,适用情况的解释引用于https://www.cnblogs.com/manmanlu/p/5732979.html,感谢巨人)
4.状态模式:当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类。
4.1 UML图:
4.2 模式解析:当内部属性(状态)发生改变时,其行为(方法)也发生改变。拿一个人的年龄举例:10岁的时候,他说:“我今年10岁了”;12岁的时候,他说:“我今年12岁了”;15岁的时候,他说:“我15岁了”...年龄是他的内部属性,当内部属性改变了,他的行为(在例子中表示为所说的话)也改变了。
Context类是包含状态的对象,从外界接收指令、改变自身状态,从而改变自身的行为,并且具体状态在Context类中实现。
4.3 模式适用条件:代码中包含了大量与对象状态有关的条件语句时使用。
5.命令模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
5.1 UML图:
5.2 模式解析:将客户端发出的命令封装好并进行参数化(在Invoker中),从而将这些命令传给接收者来执行命令。
5.3 模式适用情况:在真正需要撤销/恢复操作等功能时使用。