建设单位应该关注的网站,建设网站建设哪里好,装饰公司做网站怎么收费,城乡建设部网站安全员证书查询目录
一. 前言
二. 实现 一. 前言 策略模式 (Strategy Pattern) 是指对一系列的算法定义#xff0c;并将每一个算法封装起来#xff0c;而且使它们还可以相互替换。此模式让算法的变化独立于使用算法的客户。
与状态模式的比较 状态模式的类图和策略模式类似#xff0c;并…目录
一. 前言
二. 实现 一. 前言 策略模式 (Strategy Pattern) 是指对一系列的算法定义并将每一个算法封装起来而且使它们还可以相互替换。此模式让算法的变化独立于使用算法的客户。
与状态模式的比较 状态模式的类图和策略模式类似并且都是能够动态改变对象的行为。但是状态模式是通过状态转移来改变 Context 所组合的 State 对象而策略模式是通过 Context 本身的决策来改变组合的 Strategy 对象。所谓的状态转移是指 Context 在运行过程中由于一些条件发生改变而使得 State 对象发生改变注意必须要是在运行过程中。 状态模式主要是用来解决状态转移的问题当状态发生转移了那么 Context 对象就会改变它的行为而策略模式主要是用来封装一组可以互相替代的算法族并且可以根据需要动态地去替换 Context 使用的算法。
二. 实现 Strategy 接口定义了一个算法族它们都具有 behavior() 方法。 Context 是使用到该算法族的类其中的 doSomething() 方法会调用 behavior()setStrategy(in Strategy) 方法可以动态地改变 strategy 对象也就是说能动态地改变 Context 所使用的算法。
设计一个鸭子它可以动态地改变叫声。这里的算法族是鸭子的叫声行为。
public interface QuackBehavior {void quack();
}public class Quack implements QuackBehavior {Overridepublic void quack() {System.out.println(quack!);}
}public class Squeak implements QuackBehavior{Overridepublic void quack() {System.out.println(squeak!);}
}
public class Duck {private QuackBehavior quackBehavior;public void performQuack() {if (quackBehavior ! null) {quackBehavior.quack();}}public void setQuackBehavior(QuackBehavior quackBehavior) {this.quackBehavior quackBehavior;}
}
public class Client {public static void main(String[] args) {Duck duck new Duck();duck.setQuackBehavior(new Squeak());duck.performQuack();duck.setQuackBehavior(new Quack());duck.performQuack();}
}
squeak!
quack!