简单_策略模式(Strategy)

 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.)

[img]http://dl.iteye.com/upload/attachment/0062/4029/b5bf4019-6f33-3333-921e-adeaa6bad9c2.gif[/img]

package design.strategy;
/**
* @author 作者 E-mail: jqsl2012@163.com
* @version 创建时间:2012-1-12 下午08:36:11 <br>
*
*/
public class Test {
public static void main(String[] args) {
/**
* 策略模式 和桥梁模式很像,
* 不过桥梁模式是为了解决多维度扩展的问题,而策略模式解决的依然只是一个纬度,
* 这可能是他们本质的区别
*
* Strategy:定义一个策略接口,所有实现该策略接口的类为具体的策略类
* Context:策略模式的上下文类,内部维护一个Strategy的实例,这样就能运行时执行指定的策略算法。
* ConcreateStratA/ConcreateStratB:具体的策略实现类
*
* 策略类的应用:
* 1、运行时动态改变具体实现策略
* 2、对客户端隐藏具体的实现细节
*
* 在JDK中java.util.Comparator/javax.servlet.http.HttpServlet
* /javax.servlet.Filter#doFilter()即运用了策略模式
*/
Context context = new Context(new ConcreateStratA());
context.contextInterface();

context = new Context(new ConcreateStratB());
context.contextInterface();
}
}

package design.strategy;

/**
* @author 作者 E-mail: jqsl2012@163.com
* @version 创建时间:2012-1-12 下午08:37:57 <br>
* Strategy接口定义了一个策略,凡是实现了该接口的类都具有算法的功能 Comparable接口也是策略模式,
* Comparable接口就是定义了一个比较器,凡是实现了该比较器的类都具有比较的功能。
* 但是java.util.Comparator也是和java.lang.Comparable一样,那为什么要弄2个同样都具有比较器的接口呢?
* java.util.Comparator是为了动态实现比较器而生的
*/
public interface Strategy {
void algorithmInterface();
}

package design.strategy;

/**
* @author 作者 E-mail: jqsl2012@163.com
* @version 创建时间:2012-1-12 下午08:37:37 <br>
*
*/
public class Context {
protected Strategy strategy;

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

public void contextInterface() {
this.strategy.algorithmInterface();
}
}

package design.strategy;
/**
* @author 作者 E-mail: jqsl2012@163.com
* @version 创建时间:2012-1-12 下午08:38:54 <br>
* 策略接口的实现类
*/
public class ConcreateStratA implements Strategy{

public void algorithmInterface() {
System.out.println("算法A");
}
}

package design.strategy;
/**
* @author 作者 E-mail: jqsl2012@163.com
* @version 创建时间:2012-1-12 下午08:38:54 <br>
*
*/
public class ConcreateStratB implements Strategy{

public void algorithmInterface() {
System.out.println("算法B");
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值