策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,"/>

java设计模式--策略模式

     2022-03-19     150

关键词:

技术分享


策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合


策略模式就是用来封装算法的,但在实践中,我们发现可以用他来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性


面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性的功能的对象的抽象集合才算是类。

技术分享

抽象策略Strategy接口:定义所有支持的算法的公共接口, 这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口

//策略接口

public interface Strategy

{

     /**

      *策略方法

      * /

     public void strategyInterface();

}

具体策略ConcreteStrategy类:封装了具体的算法或行为,实现Strategy接口

//具体策略A

public class ConcreteStrategyA implements Strategy{

    @Override

     public void strategyInterface(){

         //相关业务 

     }

}

//具体策略B

public class ConcreteStrategyB implements Strategy{

     @Override

     public void strategyInterface(){

         //相关业务 

     }

}

//具体策略C

public class ConcreteStrategyC implements Strategy{

     @Override

     public void strategyInterface(){

         //相关业务 

     }

}

环境角色类:持有一个Strategy的引用。

public class Context{

     //持有一个具体策略的对象

     private Strategy strategy;

     

     /**

      *构造函数,传入一个具体策略对象

      */

     public Context(Strategy strategy){

         this.strategy=strategy; 

     }

     /**

      *策略方法

      */

     public void contextInterface(){

         strategy.strategyInterface(); 

     }

}

客户端:

public class Client{

     public static void main(String[] args){

          //选择并创建需要使用的策略对象

          Strategy strategy=new ConcreteStrategyA();

          //创建环境

          Context context=new Context(strategy);

          //业务结果

          context.contextInterface();

     }

}

策略模式的优点:

(1)策略模式的Strategy类层次为Context定义了一系列的可供重用的算法或行为,继承有助于析取出这些算法中的公共功能

(2)简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。

(3)当不同行为堆砌在一个类中时,就很难避免使用条件语句来选择合适的行为。使用策略模式可以避免使用多重条件(if-else)语句。将这些行为封装在一个个独立的Strategy类中,可以在使用这些行为的类中消除条件语句。

策略模式的缺点:

(1)客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道算法或行为的情况。

(2) 由于策略模式把每个具体的策略实现都单独封装成为类,如果备选的策略很多的话,那么对象的数目就会很可观



参考链接:http://www.cnblogs.com/java-my-life/archive/2012/05/10/2491891.html

参考书籍:《大话设计模式》

本人初学者,请大牛多指教!

java设计模式之策略模式

    策略模式属于对象的行为模式,策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换,策略模式让算法独立于使用它的客户而独立变化。策略模式使这些算法在客户端调用它们... 查看详情

java设计模式之策略模式

...此模式让算法的变化,不会影响到使用算法的客户(大话设计模式)。策略模式UML图      策略模式代码   古代的各种计谋都是一种策略,这次我们的例子就拿其中一种离间计来写的,理解起来非常容易,代码... 查看详情

java-设计模式-策略模式

策略模式其实就是对各种行为算法的包装,各种不同的行为的算法的分离。属于对象的行为模式。650)this.width=650;"src="http://www.jasongj.com/img/designpattern/strategy/Strategy.png"alt="StrategyPatternClassDiagram"/>策略模式类图,比较简单,没有自己... 查看详情

java设计模式之策略模式

1.策略模式的介绍  策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。简单的... 查看详情

java设计模式7.策略模式模板方法模式观察者模式

策略模式策略模式的用意,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。环境角色:持有一个抽象策略角色的引用。抽象策略角色:... 查看详情

java策略模式

策略模式策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。这个模式涉及到三个... 查看详情

java设计模式—策略模式

定义    通过选择策略类,来执行不同算法分支。核心是通过注入对象,改变行为。此模式其实就是springIOC思想。优点   1.算法可以自由的切换。   2.避免使用多重条件判断。   3.便于扩展:增加一个策略只需... 查看详情

java设计模式—策略模式

定义    通过选择策略类,来执行不同算法分支。核心是通过注入对象,改变行为。此模式其实就是springIOC思想。优点   1.算法可以自由的切换。   2.避免使用多重条件判断。   3.便于扩展:增加一个策略只需... 查看详情

java之策略模式(大话设计模式)

温故而知新,每次读设计模式都会有不同的体验,坚持每天一个设计模式,直到熟练运用设计模式。策略模式定义了很多完成相同工作的算法,但实现不同,它可以以相同的方式调用所有的算法,减少了算法和调用算法的耦合。... 查看详情

java描述设计模式(22):策略模式

本文源码:GitHub·点这里||GitEE·点这里一、生活场景每年双十一,各大电商平台会推出不同的满减策略,当用户的消费金额满一定额度后,会进行减去一定的优惠额度,从而来一波清仓甩卖,使用策略模式来描述该流程。publicclassC01_I... 查看详情

java设计模式-策略模式

  第一次好好的看设计模式,可能有不对的地方,大佬们可以下面指出,感谢!  -----------分割线----------  场景:商城打折活动,但是我不确定是打几折,因为换季可能打折力度不一样,8折,9折,满300减50等等等等,这... 查看详情

策略模式

...至于用何种方法取决于我们的选择。我们同样借助《大话设计模式》中实现策略模式的例子来做讲解。超市进 查看详情

java设计模式1-策略模式

策略模式:分别封装行为接口,实现算法族,超类里放行为的接口对象,在子类里具体设定行为对象.原则就是:分离变化部分,封装接口,基于接口编程各种功能.为什么要用策略模式{继承带来的问题:(为策略模式)对类的局部改动,尤其是... 查看详情

java策略模式,comparator

package 设计模式.策略模式;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.Iterator;import java.util.List;/** * @dep 查看详情

java设计模式--策略模式

1.策略模式1.1定义策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。1.2底层机制将有共性的行为抽象为一个接口,其中有此种行为的声明。该接口的实现类都实现... 查看详情

java设计模式—策略模式

定义    通过选择策略类,来执行不同算法分支。核心是通过注入对象,改变行为。此模式其实就是springIOC思想。优点   1.算法可以自由的切换。   2.避免使用多重条件判断。   3.便于扩展:增加一个策略只需... 查看详情

java设计模式之——策略模式

1、策略模式有什么好处?    策略模式的好处在于你可以动态的改变对象的行为。2、设计原则    设计原则是把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口(c++中可以用虚类... 查看详情

java策略模式(代码片段)

查看详情