您的位置:首页 > 其它

重新认识策略模式--简单分析

2016-05-30 15:40 225 查看
 一、说明

    定义了一系列的算法,并把每个算法封装起来,使他们可以相互替换。这种模式使算法可独立于使用它的客户而变化。它的中心不是如何实现算法,而是如何组织、调用这些算法,让程序结构更灵活,具有更好的维护性和扩展性。

二、类图:



三、代码实现:

/**
* 策略,定义算法接口*/
public interface Strategy{
//某个算法接口,可以传入参数,可以有返回值
public void algorithmInterface();
}
public class ConcreteStrategyA implements Strategy{
public void algorithmInterface(){
//具体实现
}
}
public class ConcreteStrategyB implements Strategy{
public void algorithmInterface(){
//具体实现
}
}
public class ConcreteStrategyCS implements Strategy{
public void algorithmInterface(){
//具体实现
}
}
/**
* 上下文,持有一个具体的策略对象*/
public class Context{
//具体的策略对象
private Strategy strategy;
//构造函数,传入具体的策略对象
public Context(Strategy strategy){
this.strategy=strategy;
}

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


四、策略模式逻辑

1.客户端选择并创建具体的策略对象。
2.客户端创建上下文
3.客户端使用上下文的方法来执行功能,在调用的时候,从客户端传入算法需要的参数。
4.上下文接到客户的调用请求,会把这个请求转发给它持有的Strategy.

五、扩展

1.通过以上逻辑,可以看出,上下文是具体策略的实现对象。策略实现对象也可以从上下文获取所需要的数据,这样上下文和策略的实现对象之间的耦合度就会很高。在这种情况下需要注意的是上下文数据的浪费,因为所有的策略对象实现都用同一个策略接口,传入相同的上下文。

2.
策略实现扩展的方式有两种,即:扩展上下文,扩展封装实际的算法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: