当前位置:   article > 正文

设计模式 知识梳理_内部体验式和外部观察式

内部体验式和外部观察式

策略模式 strategy pattern

Encapsulates interchangeable behaviors and use delegation to decide which one to use.

定义了算法族,分别封装起来,让它们之间可以互相替换。

此模式让算法的变化独立于使用算法的客户,由客户决定什么情况下使用具体策略角色。

体现的设计原则:

1)封装变化

2)针对接口编程而不是实现

3)多用组合,少用继承

使用场景:

1)许多相关类只是在行为上不同,可以动态地在许多行为中选择一种行为。

2)动态地在几种算法中选择一种。

3)避免暴露复杂的、特定用于算法的数据结构。

4)类定义了很多表现为多个条件语句的行为,应将分支移到各自策略类中。

 

状态模式 state pattern

Encapsulates state-based behaviors and use delegation to switch between behaviors.

允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

体现的设计原则:

1)单一职责原则——专门用一个状态类来表示状态。

2)开闭原则——增加状态需求修改负责状态转换的源代码,否则无法切换到新状态。

3)针对接口编程,而不是实现·。

使用场景:

1)行为随状态改变而改变。

2)条件、分支语句的替代者。

 

Q 对比策略模式、状态模式。

1)状态模式要对客户透明。策略模式不能对客户透明。

2)状态模式的行为封装在状态对象中,当前状态在状态对象中游走改变,以反映出context内部的状态,客户不关心具体状态以及状态转换过程。策略模式常常是客户根据环境或条件的不同主动指定context所要组合的策略对象是哪一个,可在运行时改变策略方案,具有弹性。

3)状态模式可作为条件判断语句的替代。策略模式可作为继承之外的弹性替代方案。

4)状态模式是某个类的对象由多种状态且不同状态下行为有差异。策略模式是某类的某行为有多种实现方式。

 

装饰者模式 decorator pattern

Wraps an object to provide new behavior.

动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

利用继承达到类型匹配,组合对象产生新行为。

以客户端透明的方式扩展对象功能。

体现的设计原则:开闭原则——对扩展开放,对修改关闭。

优点:灵活、动态、解耦

缺点:产生很多小对象,装饰比继承更容易出错且排错困难。

应用:扩展一个类的功能、动态增加或撤销功能。

 

 

模板方法模式 template method pattern

Subclasses decide how to implement steps in an algorithm.

在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。

使子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

工厂模式+模板方法模式:在工厂中使用模板方法模式。

模板方法设为final,防止被修改。

体现的设计原则:开闭原则、单一职责原则、好莱坞原则。

hook()钩子:默认不做事的方法,子类视情况要不要覆盖它,可减轻抽象类的子类负荷。

若算法该部分可选就用钩子,必须实现就用抽象方法。

1)让子类实现算法中的可选部分,

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/525967
推荐阅读
相关标签
  

闽ICP备14008679号