1.UML类图
2.实例概况
- 背景:小成有一家百货公司,最近在定年度的促销活动
- 冲突:每个节日用同一个促销活动太枯燥,没吸引力
- 解决方案:针对不同节目使用不同促销活动进行促销
使用步骤
步骤1: 定义抽象策略角色(Strategy):百货公司所有促销活动的共同接口
1 public abstract class Strategy { 2 3 public abstract void Show(); 4 }
步骤2:定义具体策略角色(Concrete Strategy):每个节日具体的促销活动
1 //为春节准备的促销活动A 2 class StrategyA extends Strategy{ 3 4 @Override 5 public void show() { 6 System.out.println("为春节准备的促销活动A"); 7 } 8 }
1 //为中秋节准备的促销活动B 2 class StrategyB extends Strategy{ 3 4 @Override 5 public void show() { 6 System.out.println("为中秋节准备的促销活动B"); 7 } 8 }
1 //为圣诞节准备的促销活动C 2 class StrategyC extends Strategy{ 3 4 @Override 5 public void show() { 6 System.out.println("为圣诞节准备的促销活动C"); 7 } 8 }
步骤3:定义环境角色(Context):用于连接上下文,即把促销活动推销给客户,这里可以理解为销售员
1 class Context_SalesMan{ 2 //持有抽象策略角色的引用 3 private Strategy strategy; 4 5 //生成销售员实例时告诉销售员什么节日(构造方法) 6 //使得让销售员根据传入的参数(节日)选择促销活动(这里使用一个简单的工厂模式) 7 public SalesMan(String festival) { 8 switch ( festival) { 9 //春节就使用春节促销活动 10 case "A": 11 strategy = new StrategyA(); 12 break; 13 //中秋节就使用中秋节促销活动 14 case "B": 15 strategy = new StrategyB(); 16 break; 17 //圣诞节就使用圣诞节促销活动 18 case "C": 19 strategy = new StrategyC(); 20 break; 21 } 22 23 } 24 25 //向客户展示促销活动 26 public void SalesManShow(){ 27 strategy.show(); 28 } 29 30 }
步骤4:客户端调用-让销售员进行促销活动的落地
1 public class StrategyPattern{ 2 public static void main(String[] args){ 3 4 Context_SalesMan mSalesMan ; 5 6 //春节来了,使用春节促销活动 7 System.out.println("对于春节:"); 8 mSalesMan = Context_SalesMan SalesMan("A"); 9 mSalesMan.SalesManShow(); 10 11 12 //中秋节来了,使用中秋节促销活动 13 System.out.println("对于中秋节:"); 14 mSalesMan = Context_SalesMan SalesMan("B"); 15 mSalesMan.SalesManShow(); 16 17 //圣诞节来了,使用圣诞节促销活动 18 System.out.println("对于圣诞节:"); 19 mSalesMan = Context_SalesMan SalesMan("C"); 20 mSalesMan.SalesManShow(); 21 } 22 } 23
结果输出
对于春节:
为春节准备的促销活动A
对于中秋节:
为中秋节准备的促销活动B
对于圣诞节:
为圣诞节准备的促销活动B
转载:https://www.jianshu.com/p/0c62bf587b9c