您的位置:首页 > 其它

设计模式之策略模式

2012-09-15 22:32 344 查看
策略模式主要定义一些列的算法,把这些算法封装成偶共同接口的单独的类,并且使他们之间可以互换。策略模式主要有下面几部分组成:
[align=left]1) 算法使用环境(Context)角色:算法被引用到这里和一些其它的与环境有关的操作一起来完成任务。[/align]
[align=left]2) 抽象策略(Strategy) 角色:规定了所有具体策略角色所需的接口。在 java 它通常由接口或者抽象类来实现。[/align]
[align=left]3) 具体策略(Concrete Strategy) 角色:实现了抽象策略角色定义的接口。[/align]
[align=left]例子演示:[/align]
[align=left]以普通会员和VIP会员享受的折扣为例[/align]
[align=left] [/align]

package com.cnblogs.ipolaris.Strategy.test;
/**
* 定义抽象策略角色
* @author iPolaris
*
*/
public interface Strategy {
public double cost( double num);
}

package com.cnblogs.ipolaris.Strategy.test;
/**
* 普通会员策略角色
* @author iPolaris
*
*/
public class StrategyCommon implements Strategy {

@Override
public double cost( double num) {
// TODO Auto-generated method stub
return num*0.9;
}

}

package com.cnblogs.ipolaris.Strategy.test;
/**
* 算法使用环境角色
* @author iPolaris
*
*/
public class Context {
private Strategy strategy ;

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

public double cost( double num){
return strategy .cost(num);
}
}

package com.cnblogs.ipolaris.Strategy.test;

public class Test {

/**
* @param args
*/
public static void main(String[] args) {
double num = 1000;
Context context = new Context(new StrategyCommon());
double newNum = context.cost(num);
System. out .println("普通会员付账" + newNum + "元");
context = new Context(new StrategyVIP());
newNum = context.cost(num);
System. out .println("VIP会员付账" + newNum + "元");
}

}


[align=left]运行结果:[/align]

普通会员付账900.0元
VIP会员付账800.0元
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: