源无极

导航

 

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

 

posted on 2018-12-13 22:13  源无极  阅读(100)  评论(0编辑  收藏  举报