定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
    答:最近看到一个例子,诸葛亮给与赵云三个锦囊妙计和刘备到东吴娶亲故事。在这场景下,一个赵云使用锦囊,锦囊内有三个不同妙计。
    第一步,我们定义一个妙计接口:

    1. public interface IStrategy {
    2. public void operate();
    3. }

    第二步,给出三个妙计的具体实现方法:

    1. public class BackDoor implements IStrategy {
    2. @Override
    3. public void operate() {
    4. // TODO Auto-generated method stub
    5. System.out.println("找乔国老帮忙,让吴国太给孙权施加压力");
    6. }
    7. }
    1. public class GivenGreenLight implements IStrategy {
    2. @Override
    3. public void operate() {
    4. // TODO Auto-generated method stub
    5. System.out.println("求吴国太开个绿灯,放行!");
    6. }
    7. }
    1. public class BlockEnemy implements IStrategy {
    2. @Override
    3. public void operate() {
    4. // TODO Auto-generated method stub
    5. System.out.println("孙夫人断后,挡住追兵");
    6. }
    7. }

    第三步,创建出锦囊,让赵云可在特点需要情况下取出锦囊里面的妙计:

    1. public class Context {
    2. //妙计
    3. private IStrategy strategy;
    4. public Context(IStrategy strategy) {
    5. this.strategy = strategy;
    6. }
    7. public void operate() {
    8. this.strategy.operate();
    9. }
    10. }

    最后一步,就是赵云的执行策略的场景:

    1. public class ZhaoYun {
    2. public static void main(String[] args) {
    3. Context context;
    4. System.out.println("-----------刚刚到吴国的时候拆第一个-------------");
    5. context = new Context(new BackDoor()); //拿到妙计
    6. context.operate(); //拆开执行
    7. System.out.println("");
    8. System.out.println("-----------刘备乐不思蜀了,拆第二个了-------------");
    9. context = new Context(new GivenGreenLight());
    10. context.operate(); //执行了第二个锦囊了
    11. System.out.println("");
    12. //孙权的小兵追了,咋办?拆第三个
    13. System.out.println("-----------孙权的小兵追了,咋办?拆第三个-------------");
    14. context = new Context(new BlockEnemy());
    15. context.operate(); //孙夫人退兵
    16. System.out.println("");
    17. }
    18. }