策略模式【Strategy Pattern】

刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题,
嘿,还别说,真是解决了大问题,搞到最后是周瑜陪了夫人又折兵呀,那咱们先看看这个场景是什么样子
的。
1
先说这个场景中的要素:
  1. 三个妙计
  2. 一个锦囊
  3. 一个赵云
妙计是小亮同志给的,妙计是放置在锦囊
里,俗称就是锦囊妙计嘛,那赵云就是一个干活的人,从锦囊中取出妙计,执行,然后获胜,用 JAVA 程序
怎么表现这个呢?我们先看类图:
策略模式【Strategy Pattern】_第1张图片

 代码实现

(1)编写3个妙计

定义妙计策略接口 

package strategy;

/**
 * 策略接口:妙计
 *
 * 锦囊一:到达东吴,先去拜会乔国老;锦囊二:刘备贪念美色不思离开,就对他谎称曹操大军压境;锦囊三:如果被东吴军队追赶,求孙夫人解围。
 *
 * @author 1
 */
public interface IStrategy {
    /**
     * 锦囊妙计
     */
    public void operate();
}
package strategy;

/**
 * 第一个锦囊
 *
 * @author 1
 * @version 1.0
 * @description: TODO
 * @date 2023/8/9 17:02
 */
public class FirstMethod implements IStrategy {
    @Override
    public void operate() {
        System.out.println("锦囊一:到达东吴,先去拜会乔国老.");
    }
}
package strategy;

/**
 * 第二个锦囊
 *
 * @author 1
 * @version 1.0
 * @description: 第二个锦囊
 * @date 2023/8/9 17:04
 */
public class SecondMethod implements IStrategy {

    @Override
    public void operate() {
        System.out.println("锦囊二:刘备贪念美色不思离开,就对他谎称曹操大军压境.");
    }
}
package strategy;

/**
 * @author 1
 * @version 1.0
 * @description: TODO
 * @date 2023/8/9 17:07
 */
public class ThirdMethod implements IStrategy {
    @Override
    public void operate() {
        System.out.println("锦囊三:如果被东吴军队追赶,求孙夫人解围.");
    }
}

(2)编写锦囊

package strategy;

/**
 * 锦囊
 *
 * @author 1
 * @version 1.0
 * @description: TODO
 * @date 2023/8/9 17:08
 */
public class Context {

    private IStrategy strategy;



    public Context(IStrategy strategy) {
        this.strategy = strategy;
    }

    /**
     * 使用锦囊
     */
    public void operate() {
        this.strategy.operate();
    }
}

(3)编写赵云(使用锦囊的人)有兴趣可以看两种调用方法,没兴趣看第一个就行

package strategy;

/**
 * @author 1
 * @version 1.0
 * @description: TODO
 * @date 2023/8/9 16:59
 */
public class ZhaoYun {




    /**
     *方法一:
     * @param args
     */
    public static void main(String[] args) {

        Context context;
        //1.赵云到吴国拿出第一个锦囊
        context = new Context(new FirstMethod());

        context.operate();
        //2.刘备不想走,拿出第二个锦囊
        context = new Context(new SecondMethod());
        context.operate();
        //3.孙权有追兵,拿出第三个锦囊
        context = new Context(new ThirdMethod());
        context.operate();
    }


    /**方法二:
        条件封装,因为需要new的三个妙计提前是知道的,可以封装到map中,依次调用
     * @param args
     */
//    public static void main(String[] args) {
//        Map map = new HashMap() {{
//            put(1, new FirstMethod());
//            put(2, new SecondMethod());
//            put(3, new ThirdMethod());
//        }};
//
//        Context context;
//        //1.赵云到吴国拿出第一个锦囊
//        context = new Context(map.get(1));
//        context.operate();
//        //2.刘备不想走,拿出第二个锦囊
//        context = new Context(map.get(2));
//        context.operate();
//        //3.孙权有追兵,拿出第三个锦囊
//        context = new Context(map.get(3));
//        context.operate();
//    }

}

执行结果

策略模式【Strategy Pattern】_第2张图片

 

你可能感兴趣的:(设计模式,策略模式)