定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
答:最近看到一个例子,诸葛亮给与赵云三个锦囊妙计和刘备到东吴娶亲故事。在这场景下,一个赵云使用锦囊,锦囊内有三个不同妙计。
第一步,我们定义一个妙计接口:
public interface IStrategy {
public void operate();
}
第二步,给出三个妙计的具体实现方法:
public class BackDoor implements IStrategy {
@Override
public void operate() {
// TODO Auto-generated method stub
System.out.println("找乔国老帮忙,让吴国太给孙权施加压力");
}
}
public class GivenGreenLight implements IStrategy {
@Override
public void operate() {
// TODO Auto-generated method stub
System.out.println("求吴国太开个绿灯,放行!");
}
}
public class BlockEnemy implements IStrategy {
@Override
public void operate() {
// TODO Auto-generated method stub
System.out.println("孙夫人断后,挡住追兵");
}
}
第三步,创建出锦囊,让赵云可在特点需要情况下取出锦囊里面的妙计:
public class Context {
//妙计
private IStrategy strategy;
public Context(IStrategy strategy) {
this.strategy = strategy;
}
public void operate() {
this.strategy.operate();
}
}
最后一步,就是赵云的执行策略的场景:
public class ZhaoYun {
public static void main(String[] args) {
Context context;
System.out.println("-----------刚刚到吴国的时候拆第一个-------------");
context = new Context(new BackDoor()); //拿到妙计
context.operate(); //拆开执行
System.out.println("");
System.out.println("-----------刘备乐不思蜀了,拆第二个了-------------");
context = new Context(new GivenGreenLight());
context.operate(); //执行了第二个锦囊了
System.out.println("");
//孙权的小兵追了,咋办?拆第三个
System.out.println("-----------孙权的小兵追了,咋办?拆第三个-------------");
context = new Context(new BlockEnemy());
context.operate(); //孙夫人退兵
System.out.println("");
}
}