设计模式-行为型模式

90 阅读3分钟

四、行为型模式(11)

java-design-patterns.com/patterns/

行为型模式( Behavioral Patterns)
行为型模式关注对象之间的交互和职责分配,描述类或对象如何相互通信以及如何分配职责。
方法设计的角度。

Strategy

策略模式(Strategy Pattern)
定义一个算法族,封装每个算法,并使它们可互换。Strategy 允许算法独立于使用它的客户端而变化。也称为政策模式(Policy)。策略模式是一种对象行为型模式。
这算法体现了几个设计原则,第一、把变化的代码从不变的代码中分离出来;第二、针对接口编程而不是具体类(定义了策略接口) ;第三、多用组合/聚合,少用继承(客户通过组合方式使用策略)。
体现了“对修改关闭,对扩展开放”原则,客户端增加行为不用修改原有代码,只要添加一种策略 (或者行为) 即可,避免了使用多重转移语句 (if..else if..else)

1.类图

类图
1.策略接口(Strategy Interface): 定义了所有支持的算法的公共接口。这样,任何实现了这个接口的类都可以作为一个策略被使用。按照策略模式的经典定义,Strategy更常见的是作为一个接口或一个抽象类。
2.具体策略类(Concrete Strategy Classes): 实现了策略接口的具体算法类。每个具体策略类封装了一个具体的算法或行为。在运行时,客户端可以选择不同的具体策略类来执行不同的算法。
3.上下文类(Context): 使用策略对象的类。它通常持有一个策略对象的引用,并且可以根据需要在不同的策略之间切换。上下文类定义了一个接口来让策略访问它的数据(如果需要的话)。说明::从上图可以看到,客户context 有成员变量strategy或者其他的策略接口至于需要使用到哪个策略,我们可以在构造器中指定。
4.App类

2.应用

Java的Java .util. comparator接口是Strategy模式的一个常见示例。

某旅游公司欲开发一套软件系统,要求能根据季节,节假日等推出不同的旅行定价包,如淡季打折、一口价等。实现该要求适合采用策略模式。

State

状态模式(State Pattern)
允许对象在其内部状态改变时改变其行为。对象似乎改变了它的类。
其别名为状态对象(Objects for States),状态模式是一种对象行为型模式。
状态和行为是一一对应的,状态之间可以相互转换。

1.类图

类图
1.State(状态接口):定义一个所有具体状态类的公共接口,声明处理状态相关的方法,这些方法分别对应了上下文对象在不同状态下需要展现的不同行为。
2.ConcreteState(具体状态类):实现State接口,每一个具体状态类代表上下文的一个具体状态,提供该状态下上下文对象的行为实现。
3.Context(上下文类):维护一个State对象的引用,这个引用定义了当前状态。上下文对象可以根据内部逻辑改变这个引用,从而改变状态,同时提供一个接口给外部调用,而这个接口会委托给当前的State对象处理,从而实现状态的切换和对应行为的执行。