05 - 策略模式

定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换。

类型:行为类模式

策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这些类实现相同的接口,相互之间可以替换。在前面说过的行为类模式中,有一种模式也是关注对算法的封装——模版方法模式,对照类图可以看到,策略模式与模版方法模式的区别仅仅是多了一个单独的封装类Context,它与模版方法模式的区别在于:在模版方法模式中,调用算法的主体在抽象的父类中,而在策略模式中,调用算法的主体则是封装到了封装类Context中,抽象策略Strategy一般是一个接口,目的只是为了定义规范,里面一般不包含逻辑。其实,这只是通用实现,而在实际编程中,因为各个具体策略实现类之间难免存在一些相同的逻辑,为了避免重复的代码,我们常常使用抽象类来担任Strategy的角色,在里面封装公共的代码,因此,在很多应用的场景中,在策略模式中一般会看到模版方法模式的影子。

策略模式的结构

  • 封装类:也叫上下文,对策略进行二次封装,目的是避免高层模块对策略的直接调用。
  • 抽象策略:通常情况下为一个接口,当各个实现类中存在着重复的逻辑时,则使用抽象类来封装这部分公共的代码,此时,策略模式看上去更像是模版方法模式。
  • 具体策略:具体策略角色通常由一组封装了算法的类来担任,这些类之间可以根据需要自由替换。

策略模式代码实现

抽象策略类:

1 package com.dp.strategypattern;
2
3 public interface IStrategy {
4     public void doSomething();
5 }

具体策略类

1 package com.dp.strategypattern;
2
3 public class Strategy1 implements IStrategy {
4     @Override
5     public void doSomething() {
6         System.out.println("具体策略------》 1");
7     }
8 }
1 package com.dp.strategypattern;
2
3 public class Strategy2 implements IStrategy {
4     @Override
5     public void doSomething() {
6         System.out.println("具体策略------》 2");
7     }
8 }

封装类

 1 package com.dp.strategypattern;
 2
 3 public class Context {
 4     private IStrategy strategy;
 5
 6     public Context(IStrategy strategy){
 7         this.strategy = strategy;
 8     }
 9
10     public void execute(){
11         strategy.doSomething();
12     }
13 }

测试类

 1 package com.dp.strategypattern;
 2
 3 public class StrategyTest {
 4
 5     public static void main(String[] args){
 6         Context context;
 7         System.out.println("execute Strategy 1");
 8         context = new Context(new Strategy1());
 9         context.execute();
10
11         System.out.println("execute Strategy 2");
12         context = new Context(new Strategy2());
13         context.execute();
14     }
15 }

----------- output ----------------

execute Strategy 1
具体策略------》 1
execute Strategy 2
具体策略------》 2

http://blog.csdn.net/monkey_d_meng/article/details/6005764

时间: 2024-12-24 06:00:21

05 - 策略模式的相关文章

Strategy策略模式

策略模式定义了一系列算法,把它们一个个封装起来,并且使它们可相互替换.该模式可使得算法能独立于使用它的客户而变化.Strategy模式是行为模式,正因为他是一种行为模式,所以他不是用来解决类的实例化的,跟创建什么样的产品没有关系,此模式解决的问题是把一个系列完成相同工作,却实现不同的算法(行为)包装到一系列的策略类里面,使得它们可以相互替换,提供一个访问接口,由客户端决定在什么情况下使用什么具体策略,来完成某一功能.并可以自由的添加修改相应的算法,轻松实现可插入式(Pluggable)的系统的开

深入理解JavaScript系列(33):设计模式之策略模式(转)

介绍 策略模式定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户. 正文 在理解策略模式之前,我们先来一个例子,一般情况下,如果我们要做数据合法性验证,很多时候都是按照swith语句来判断,但是这就带来几个问题,首先如果增加需求的话,我们还要再次修改这段代码以增加逻辑,而且在进行单元测试的时候也会越来越复杂,代码如下: validator = { validate: function (value, type) { switch (type) { c

java设计模式-策略模式

定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化. 认识策略模式 策略模式的重心 策略模式的重心不是如何实现算法,而是如何组织.调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性. 算法的平等性 策略模式一个很大的特点就是各个策略算法的平等性.对于一系列具体的策略算法,大家的地位是完全一样的,正因为这个平等性,才能实现算法之间可以相互替换.所有的策略算法在实现上也是相互独立的,相互之间是没有依赖的. 所以可以

第23章 行为型模式—策略模式

1. 状态模式(State Pattern)的定义 (1)定义:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.本模式使得算法可独立于使用它的客户而变化. ①算法是同一接口的不同实现,地位是平等的,可以相互替换. ②引入上下文对象,可以实现让算法能独立使用它的客户.因为这个对象负责持有算法,但不负责决定具体选用哪个算法,把选择算法的功能交给了客户. ③当客户通知上下文对象执行功能的时候,上下文会转调具体的算法. (2)策略模式的结构和说明 ①Strategy:策略接口,用来约束一系

《Java设计模式》之策略模式

策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 1,什么是策略模式? 策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 2,策略模式有什么好处? 策略模式的好处在于你可以动态的改变对象的行为. 3,设计原则 设计原则是把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口(c++z中可以用虚类),然

研磨设计模式之策略模式

策略模式(Strategy) 1  场景问题 1.1  报价管理 向客户报价,对于销售部门的人来讲,这是一个非常重大.非常复杂的问题,对不同的客户要报不同的价格,比如: (1)对普通客户或者是新客户报的是全价 (2)对老客户报的价格,根据客户年限,给予一定的折扣 (3)对大客户报的价格,根据大客户的累计消费金额,给予一定的折扣 (4)还要考虑客户购买的数量和金额,比如:虽然是新用户,但是一次购买的数量非常大,或者是总金额非常高,也会有一定的折扣 (5)还有,报价人员的职务高低,也决定了他是否有权

13 策略模式

在阎宏博士的<JAVA与模式>一书中开头是这样描述策略(Strategy)模式的: 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 策略模式的结构 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理.策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类.用一句话来说,就是:“准备一组算法,并将每一个算法封装起来

《JAVA与模式》之策略模式_转载

转自:http://www.cnblogs.com/java-my-life/archive/2012/05/10/2491891.html 在阎宏博士的<JAVA与模式>一书中开头是这样描述策略(Strategy)模式的: 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 策略模式的结构 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管

设计模式笔记:状态模式&amp;策略模式

这几天一直在忙期末考和实训,写笔记的时间也没有多少,不说废话了: 这文主要写两种模式:状态跟策略,主要是因为他们的类图一样,并且比较简单,写在同一篇文章里面容易甄别 状态模式:允许对象在内部状态改变时改变他的行为,对象看起来好像修改了他的类 先保留概念的意思,在平常的编程中,如果需要不同的状态,很一般的做法是在你要操作的类里面定义不同的常量代表不同的状态,然后if-else依据不同的状态有不同的实现: 1.你可以想象大量的if-else语句造成的低可读性和低效率 2.其次是你修改这个类的时候很麻