`

设计模式------策略模式

阅读更多
我认为核心思想是:把变化的方法也当作参数传过来

1.语义:策略模式 :  所谓策略就是有不同的方法,不同的方式,或者说是不同的算法,但这些策略可能都是为了实现一种应用,比如公司经营业务变化图, 可能有两种实现方式,一个是线条曲线,一个是框图,这是两种不同的途径来表达同一个东西,那么可能会根据不同的需要灵活的选择其中的一种来用,所以这两种策略就可以把他们变成接口的实现,用接口就可以了。。。
2.又比如鸭子的飞行方式(head first中的例子),有的鸭子这样飞,有的那样飞,所以飞的策略是不一样的,但是都可以飞嘛。。所以飞是可变动的,飞就要变成接口。。。。

3. 用张孝祥的话说:你想干什么事,我就传一段代码给你,这段代码能帮你干,那么怎么传一段代码啊,因为不能把一段代码传给一个方法,所以我们把代码封装到一个对象里面,然后我把那个对象传递给你,以后你调用那个对象的那个方法就可以了


策略模式的做法和命令模式一样,他解决的问题与模板方法一样。。。。

//下面把模板方法改成策略模式
先上模板方法
public abstract class CaffeineBeverage{   
3.    final void prepareRecipe(){   
4.       boilWater(); //固定的   
5.        brew();       //抽象的-----可以更加子类定制   
6.        pourInCup();  //固定的   
7.        addCondiments();  //抽象的   
8.    }   
9.       
10.    abstract void brew(); //缺点是子类只能有一个brew(),如果子类要更加不同情况来生成不同brew,那么这种方法就没用了
11.    abstract void addCondiments();   
12.  
13.    void boilWater(){   
14.       //实现   
15.    }   
16.        
17.    void pourInCup(){   
18.       //实现   
19.    }   
20.}   

上面体现出了子类要用到它必须继承的坏处

我们应该把变化的部分通过参数的形式传进来
public class CaffeineBeverage{   
3.    final void prepareRecipe(PrepareReciper pr){   
4.       boilWater(); //固定的   
5.        pr.brew();       //抽象的-----可以更加子类定制   
6.        pourInCup();  //固定的   
7.        pr.addCondiments();  //抽象的   
8.    }   
9.        
12.  
13.    void boilWater(){   
14.       //实现   
15.    }   
16.        
17.    void pourInCup(){   
18.       //实现   
19.    }   
20.}   

下面是使用这个模板的类
public class Cooker{
   CaffeineBeverage cb = new CaffeineBeverage();
   if(cooker.equals("zhangsan")){  //根据不同的策略来传递方法体
      cb.prepareRecipe(new PrepareReciper(){
           void brew(){
              .....
           }
           void addCondiments(){
              .....
           }
      });
   }else {
        cb.prepareRecipe(new PrepareReciper(){
           void brew(){
              .....
           }
           void addCondiments(){
              .....
           }
      });

   }
  
}

分享到:
评论

相关推荐

    c++设计模式-行为型模式-策略模式

    c++设计模式-行为型模式-策略模式;qt工程;c++简单源码; 策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于...

    C++设计模式--基于Qt4开源跨平台开发框架

    《C++设计模式--基于Qt4开源跨平台开发框架》一书主要探讨了如何在C++编程中利用设计模式,并结合Qt4框架进行高效的跨平台应用开发。设计模式是软件工程中的重要概念,它们是经过时间和实践验证的解决特定问题的模板...

    JAVA-设计模式-行为型模式-策略模式

    JAVA-设计模式-行为型模式-策略模式

    设计模式-策略者

    在《设计模式-策略者》这篇文章中,作者深入浅出地介绍了策略模式的基本概念、结构和实现方式。文章可能涵盖了以下几个关键知识点: 1. **模式定义**:策略模式允许在运行时选择不同的算法或策略,提供了一种用面向...

    java设计模式---诙谐易懂版

    1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以互换。策略模式让算法的变化独立于使用算法的客户端。在提供...

    设计模式-Java语言中的应用

    通过阅读《设计模式-Java语言中的应用》,读者不仅可以掌握设计模式的基本概念和原理,还能学习到如何在实际项目中选择合适的设计模式,以及如何优雅地在Java代码中实现这些模式。这将有助于提升开发者的编程技巧,...

    设计模式---策略者模式

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件开发中,我们经常遇到需要在不同时间或根据不同条件执行不同算法的情况。策略模式允许我们将算法封装到独立的可互换的策略类中,使得算法的变化...

    北大青鸟设计模式--策略模式

    北大青鸟关于设计模式的PPT,讲述的非常清晰,对于初学设计模式的人来说,非常有用。本篇是关于策略模式的PPT

    C++设计模式-基于QT4开源跨平台开发框架 源码

    5. **策略模式** - QT4的信号和槽可以视为一种策略,开发者可以根据需要连接不同的槽函数来改变对象的行为。 6. **命令模式** - 可以利用QT4的QMetaObject系统和QSignalMapper来实现命令模式,通过信号触发不同的...

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    - 策略模式(Strategy):定义一系列的算法,把它们一个个封装起来,并且使它们可以互相替换。 - 模板方法模式(Template Method):定义一个操作中的算法骨架,而将一些步骤延迟到子类中。 - 访问者模式...

    设计模式解读之--策略模式.pdf

    ### 设计模式解读之策略模式 #### 模式定义与核心思想 策略模式是一种行为设计模式,它使得算法可以独立于使用它的客户而变化。在软件工程中,策略模式允许一组算法封装成一系列的类,它们共享相同的接口,但内部...

    深入浅出设计模式(C#版)--策略模式--示例代码

    例如,在"深入浅出设计模式(C#版)--策略模式--示例代码"中,可能会有一个`IDuck`接口,它定义了飞、叫等基本行为。然后有多个具体的鸭子类型,如`MallardDuck`、`RedheadDuck`等,每个类型可能有不同的飞行和叫声...

    JAVA设计模式--程序设计--反射--注解--泛型

    设计模式包括创建型模式(如单例、工厂方法、抽象工厂等)、结构型模式(如适配器、装饰器、代理等)和行为型模式(如策略、观察者、职责链等)。这些模式提供了良好的可复用性和可扩展性,帮助开发者遵循“开闭原则...

    JAVA设计模式例程-策略模式

    在众多的设计模式中,策略模式(Strategy Pattern)是一种行为设计模式,它使你能在运行时改变对象的行为。在这个“JAVA设计模式例程-策略模式”的压缩包中,我们可以深入探讨策略模式的原理及其应用。 策略模式的...

    《设计模式--基于C#的工程化实现及扩展》.(王翔)_《0528》.rar

    《设计模式--基于C#的工程化实现及扩展》是一本深入探讨软件设计模式的书籍,作者王翔通过C#语言来阐述各种设计模式的工程化应用和拓展。设计模式是软件开发中的一种最佳实践,它总结了在特定场景下解决常见问题的...

    设计模式系列博客--策略模式

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件开发中,我们经常遇到需要根据不同的条件或场景来改变算法的情况。策略模式就是为了解决这类问题而诞生的,它允许我们在不修改对象本身的情况下...

    设计模式课件大全

    PPT内容包括:内附代码,实例,方便理解。 继承、封装、多态、UML 设计模式02 设计模式03-创建型模式 ...设计模式16-策略模式、模板方法、访问者 此PPT实例便于理解,对于深入理解OO思想有很大帮助。

    时间触发嵌入式系统设计模式--配套光盘

    在《时间触发嵌入式系统设计模式》这本书中,作者深入浅出地探讨了如何通过精心设计和优化调度策略来实现这种系统。光盘中的内容,特别是与8051系列微控制器相关的部分,提供了实际应用开发的实例,帮助读者更好地...

    java设计模式-策略模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...

    设计模式-C++

    创建型模式,共五种:工厂方法模式、抽象工厂模式、...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

Global site tag (gtag.js) - Google Analytics