【设计模式】行为型模式(下)
行为型模式思维导图:
备忘录模式(Memento)
是什么?
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
结构图?
使用场景?
系统有需要提供回滚操作的需求,比如jdbc的事务操作,文本编辑器的ctrl+z恢复等
优缺点?
优:①当发起人角色中的状态改变时,有可能这是个错误的改变,我们使用备忘录模式就可以把这个错误的改变还原②发起人角色不需要对各个备份的状态进行管理
缺:对资源的消耗较严重
状态模式(State)
是什么?
当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类。
结构图?
使用场景?
①当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时②一个操作中含有庞大的分支结构,并且这些分支决定于对象的状态
好处?
可将不同状态的行为分割开;通过定义新的子类很容易增加新的状态和转换;可减少子类之间的依赖观察者模式(Observe)
是什么?
又叫做发布/订阅模式。定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
结构图?
使用场景?
①当一个对象的改变需要改变其它对象且其不知道具体有多少个对象有待改变时②一个抽象模型有两个方面,当其中一个方面依赖于另一个方面,这时用观察者模式可以将这两者封装在独立的对象中,使他们各自独立地改变和复用。
好处?
解除了主题和具体观察者的耦合,使其均依赖于抽象
委托?委托是一种引用方法的类型。
模板方法模式(TemplateMethod)
是什么?
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
结构图?
使用场景?
①在某些类的算法中,用了相同的方法,造成代码重复②控制子类扩展,子类必须遵守算法规则
好处?
通过把不变的行为搬到超类,去除了子类中重复的代码策略模式(Strategy)
是什么?
定义然后封装了算法家族,使其可以互相替换,而且其改变不会影响到使用算法的客户。
结构图?
使用场景?
①许多相关的类仅仅是行为有异②需要使用一个算法的不同变体③算法使用客户不应该知道的数据④一个类定义了多种行为,并且在类的操作中以多个条件语句的形式出现。
好处?
提供了可以替换继承关系的办法;消除了一些if else语句;实现的选择小结
行为型模式的总结就算告一个段落了,越来越觉得编织知识网的重要性。加油
接下来会有一篇对设计模式的总的再总结博客,敬请期待。