package cn.bunny.pattern2.demo2;

public class BaseStrategy {

    public static void main(String[] args) {
        // 每一个策略
        ConcreteStrategy1 concreteStrategy1 = new ConcreteStrategy1();
        ConcreteStrategy2 concreteStrategy2 = new ConcreteStrategy2();

        // 执行策略
        new Context(concreteStrategy1).doIt();
        new Context(concreteStrategy2).doIt();
    }

    // 基本的策略
    public interface Strategy {

        /**
         * 需要执行的方法
         */
        void method();
    }

    // 具体的策略实现1
    public static class ConcreteStrategy1 implements Strategy {

        /**
         * 需要执行的方法
         */
        @Override
        public void method() {
            System.out.println("具体的策略实现1...");
        }
    }

    // 具体的策略实现2
    public static class ConcreteStrategy2 implements Strategy {

        /**
         * 需要执行的方法
         */
        @Override
        public void method() {
            System.out.println("具体的策略实现2...");
        }
    }

    // 提供上下文
    public static class Context {
        private final Strategy strategy;

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

        /**
         * 需要做的事情
         */
        public void doIt() {
            strategy.method();
        }
    }
}
