解析:

定义:定义一系列算法,将每个算法封装到具有公共接口的一系列策略类中,从而使他们可以相互替换 & 让算法可在不影响客户的情况下发生变化

 

实现:

  1. 定义抽象策略角色
    public abstract class Strategy{
        public abstract void show();
    }


     

  2. 定义具体策略角色(Concrete Strategy):每个节日具体的促销活动;
    //为春节准备的促销活动A

    class StrategyA extends Strategy{
        @Override
        public void show(){
            System.out.println("为春节准备的促销活动A");
        }
    }


    //为中秋节准备的促销活动B

    class StrategyB extends Strategy{
        @Override
        public void show(){
            System.out.println("为中秋节准备的促销活动B");
        }
    }


    //为圣诞准备的促销活动C

    class StrategyC extends Strategy{
        @Override
        public void show(){
            System.out.println("为圣诞节准备的促销活动C");
        }
    }


     

  3. 定义环境角色(Context):用于连接上下文,即把促销活动推销给客户,这里可以理解为销售员

    class Context_SalesMan{
        //持有抽象策略角色的引用
        private Strategy strategy;
    
        //生成销售员实例时,告诉销售员什么节日(构造方法)
        //使得销售员根据传入的参数(节日)选择促销活动(这里使用的一个简单的工厂模式)
        public Context_SalesMan(String festival){
            switch(festival){
                //春节就使用春节促销活动
                case "A":
                    strategy = new StrategyA();
                    break;
                //中秋节就使用中秋节促销活动
                case "B":
                    strategy = new StrategyB();
                    break;
                //圣诞节就使用圣诞节促销活动
                case "B":
                    strategy = new StrategyC();
                    break;
                    
            }
        }
    
        //向客户展示促销活动
        public void SalesManShow(){
            strategy.show();
        }
    }


     

  4. 客户端调用-让销售员进行促销活动的落地

    public class StrategyPattern{
        public static void main(String args[]){
        
            Context_SalesMan mSalesMan;
    
            //春节来了,使用春节促销活动
            System.out.println("对于春节:");
            mSalesMan = new Context_SalesMan("A");
            mSalesMan.SalesManShow();
    
            //中秋节来了,使用中秋节促销活动
            System.out.println("对于中秋节:");
            mSalesMan = new Context_SalesMan("B");
            mSalesMan.SalesManShow();
    
            //圣诞节来了,使用圣诞节促销活动
            System.out.println("对于圣诞节:");
            mSalesMan = new Context_SalesMan("C");
            mSalesMan.SalesManShow();
        }
    }



     

最后修改于 2020-03-29 14:08:20
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇