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

原创 2016年05月30日 15:40:55

 一、说明

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

二、类图:


三、代码实现:

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

策略模式的简单例子

  • 2012-04-25 21:13
  • 11KB
  • 下载

重新认识c++(01),做个简单的复数Complex类

最近看了一下Effect c++ 想要重新理解一下c++的机制以及内存布局,还是想搞这方面的研究,对底层不明白,总是有点很不踏实。 那就写了一个 Complex 类,这个类还是相对比较全的,基本上涵...
  • wwwzys
  • wwwzys
  • 2014-03-05 22:04
  • 1865

Android策略模式简单Demo

  • 2016-02-20 21:25
  • 1.22MB
  • 下载

对XML文件的重新认识,说说XML文件的二三事(三):XML两类解析模式(1)-SAX解析XML

XML的解析方式常见的有两种,一种是以事件为驱动的XML解析,比如SAX。另外一种是类似于树形属性结构的数据,比如DOM类以及在此基础上延伸升级的JDOM以及DOM4J。这两种解析XML的方式完全不同...

天天学设计模式1--重新认识面向对象

本人新手,发博客纯属为了,鼓励自己监督自己,如果有错误还请指正,虽然我认为没什么人会看啦 好了!开更!(我是按大话设计模式一章节一章节看过来) 接触充满代码的世界算下来差不多快有一年了,几个主流语...

重新认识 MVC 和 三层设计模式

重新认识 MVC 和 三层设计模式首先不得不承认,身边有一群8年+工作经验的大牛就是爽,纠正了我一个认知上的错误首先来看一下官方的解释: MVC: MVC全名是Model View Cont...

【机房合作】重新认识外观模式

机房收费系统合作版,是我们第三次与机房收费系统相遇的时刻。在个人重构的时候,我们就开始了“七层架构”之旅,其中外观模式是单独作为一层来开发的。 那个时候,也不理解外观是起到怎样一个作用,大话上的解释...

【机房合作】——重新认识设计模式

第一次接触设计模式,感觉设计模式好难啊,用起来好麻烦,类图代码什么的都看不懂。第二次接触设计模式是重构时,用到了抽象工厂、外观、模板等,还用到了反射的技术,敲完代码发现设计模式也不是很难用,类图代码也...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)