策略模式
策略模式的定义
策略模式(Strategy Pattern)也叫政策模式,是一种比较简单的模式
策略模式的英文原话是:Define a family of algorithms, encapsulate each one, and make them interchangeable.
意思是:定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。
其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换,使得算法可以在不影响到客户端的情况下发生变化。
策略模式的通用类图如图5-9所示。
策略模式涉及以下3个角色。
■ 环境(Context)角色:该角色也叫上下文角色,起到承上启下的作用,屏蔽高层模块对策略、算法的直接访问,它持有一个Strategy类的引用
■ 抽象策略(Strategy)角色:该角色对策略、算法进行抽象,通常定义每个策略或算法必须具有的方法和属性。
■ 具体策略(Concrete Strategy)角色:该角色实现抽象策略中的具体操作,含有具体的算法。

将需要变化的那部分功能拿出来,
public interface RunBehavior { 跑抽象出一个接口
void run();
}
public class RunNormally implements RunBehavior{ 正常跑
@Override
public void run() {
System.out.println("harding running...");
}
}
public class RunNoWay implements RunBehavior{ 不跑
@Override
public void run() {
}
}
public interface SayHiBehavior { 说 抽象出一个接口
void sayHi();
}
public class SayHiNormally implements SayHiBehavior{ 正常说
@Override
public void sayHi() {
System.out.println("gegege");
}
}
public class SayHiScream implements SayHiBehavior{ 尖叫说
@Override
public void sayHi() {
System.out.println("gagagagaga....");
}
}
public abstract class Chicken {
private SayHiBehavior sayHiBehavior;
private RunBehavior runBehavior;
public void setSayHiBehavior (SayHiBehavior sayHiBehavior) {
this.sayHiBehavior=sayHiBehavior;
}
public void setRunBehavior(RunBehavior runBehavior){
this.runBehavior=runBehavior;
}
public void performSayHi(){
this.sayHiBehavior.sayHi();
}
public void performRun(){
this.runBehavior.run();
}
public abstract void show();
}
public class WhiteChicken extends Chicken{
@Override
public void show() {
System.out.println("white...");
}
}
public class MyTest {
public static void main(String[] args) {
WhiteChicken whiteChicken=new WhiteChicken();
whiteChicken.setRunBehavior(new RunNormally());
whiteChicken.setSayHiBehavior(new SayHiNormally());
whiteChicken.performSayHi();
whiteChicken.performRun();
whiteChicken.show();
}
}
参考:

浙公网安备 33010602011771号