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

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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangdan1030/article/details/51538450

使用数据库保存session的方法

作者:liuphy   发表日期:2000年12月20日   阅读次数:98     php的session默认是以文件方式保存在服务器端,并且在客户端使用cookie保存变量,这就会出现一个问题,当...
  • terrywang
  • terrywang
  • 2000-12-21 23:27:00
  • 589

策略模式原理及案例分析

策略模式的正式定义为:它定义了一个算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。     这个概念毕竟是对这个模式的高度总结,我们可以先不必了解其含义,看完...
  • RunawaySmallRiver
  • RunawaySmallRiver
  • 2016-08-30 15:12:14
  • 832

策略模式(Strategy Pattern)就这么简单

0x00 举个生活中的例子某个大人网站是会员制的,金牌会员购买精神食粮打7折,银牌会员打8折,铜牌会员打9折,铁牌会员不打折。也就是说不同的用户在购买精神食粮的时候结算的价格是不一样的,即使你们买相同...
  • fiendvip
  • fiendvip
  • 2016-04-12 21:18:35
  • 5236

三分钟理解“策略模式”——设计模式轻松掌握

策略模式的作用: 1.使用了策略模式后,如果需要增加一种策略,那么只需要创建一个实现了Strategy接口的子类,并重写其中的函数,然后在Context的构造函数中增加这种子类的判断。客户端的代码、C...
  • u010425776
  • u010425776
  • 2015-08-31 11:14:43
  • 1507

简单理解设计模式之策略模式

1.首先谈谈最近的感受吧。         这些天,忙于各种笔试,,真是应了那个话,书到用时方恨少,发现自己的知识储备跟其他的人还有非常大的差距,所以在这里跟自己说一句还是学习吧,慢慢来,不用急,机会...
  • YQYnsmile
  • YQYnsmile
  • 2016-09-08 21:10:44
  • 795

策略模式在java中的简单使用的代码

飞的行为接口: public interface FlyBehavior { public void fly(); } 飞的行为接口实现类: public class FlyImpl imp...
  • cheng9981
  • cheng9981
  • 2016-12-29 13:55:42
  • 138

设计模式之策略模式&简单工厂模式

学习设计模式已经有很长一段时间了,其实先前已经敲过一遍了,但是老觉得没有学到什么,认识也不够深刻,现在趁着重构机房,再重新来过,也不晚。...
  • u010540106
  • u010540106
  • 2014-06-02 21:18:32
  • 1920

设计模式--深度解析策略模式(Strategy Pattern)

前些天网购一本Head First Design Patterns,学习了一下,觉得写的挺好,而且挺有趣的,推荐大家都去买一本,真心不错。在这里我先讲一下,这两天学的,两个常见的设计模式,分别Stra...
  • qq_29282475
  • qq_29282475
  • 2015-12-04 14:17:25
  • 4322

21世纪最纯净的心灵《重新认识你自己》(pdf.rar

  • 2008年08月30日 10:55
  • 10.27MB
  • 下载

从头认识设计模式-策略模式-01-原始应用场景

从头认识设计模式-策略模式-01-原始应用场景
  • raylee2007
  • raylee2007
  • 2016-03-16 22:34:04
  • 1749
收藏助手
不良信息举报
您举报文章:重新认识策略模式--简单分析
举报原因:
原因补充:

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