设计模式之策略模式

策略模式主要定义一些列的算法,把这些算法封装成偶共同接口的单独的类,并且使他们之间可以互换。策略模式主要有下面几部分组成:
1) 算法使用环境(Context)角色:算法被引用到这里和一些其它的与环境有关的操作一起来完成任务。
2) 抽象策略(Strategy) 角色:规定了所有具体策略角色所需的接口。在 java 它通常由接口或者抽象类来实现。
3) 具体策略(Concrete Strategy) 角色:实现了抽象策略角色定义的接口。
例子演示:
以普通会员和VIP会员享受的折扣为例
 
 1 package com.cnblogs.ipolaris.Strategy.test;
 2 /**
 3  * 定义抽象策略角色
 4  * @author iPolaris
 5  *
 6  */
 7 public interface Strategy {
 8         public double cost( double num);
 9 }
10 
11 package com.cnblogs.ipolaris.Strategy.test;
12 /**
13  * 普通会员策略角色
14  * @author iPolaris
15  *
16  */
17 public class StrategyCommon implements Strategy {
18 
19         @Override
20         public double cost( double num) {
21                // TODO Auto-generated method stub
22                return num*0.9;
23        }
24 
25 }
26 
27 
28 package com.cnblogs.ipolaris.Strategy.test;
29 /**
30  * 算法使用环境角色
31  * @author iPolaris
32  *
33  */
34 public class Context {
35         private Strategy strategy ;
36 
37         public Context(Strategy strategy) {
38                super ();
39                this .strategy = strategy;
40        }
41        
42         public double cost( double num){
43                return strategy .cost(num);
44        }
45 }
46 
47 
48 package com.cnblogs.ipolaris.Strategy.test;
49 
50 public class Test {
51 
52         /**
53         * @param args
54         */
55         public static void main(String[] args) {
56                double num = 1000;
57               Context context = new Context(new StrategyCommon());
58                double newNum = context.cost(num);
59               System. out .println("普通会员付账" + newNum + "元");
60               context = new Context(new StrategyVIP());
61               newNum = context.cost(num);
62               System. out .println("VIP会员付账" + newNum + "元");
63        }
64 
65 }
运行结果:
 
普通会员付账900.0元
VIP会员付账800.0元

 

posted @ 2012-09-15 22:32  iPolaris  阅读(154)  评论(0编辑  收藏  举报