关闭

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

164人阅读 评论(2) 收藏 举报

 一、说明

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

二、类图:


三、代码实现:

/**
 * 策略,定义算法接口*/
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.
策略实现扩展的方式有两种,即:扩展上下文,扩展封装实际的算法。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:74184次
    • 积分:4921
    • 等级:
    • 排名:第5744名
    • 原创:118篇
    • 转载:1篇
    • 译文:0篇
    • 评论:912条
    博客专栏
    文章分类
    最新评论