用java实现策略模式

java中的策略模式

一、概述

二、通过基类来实现策略模式

三、通过接口来实现策略模式

四、总结

一、概述

  所谓策略模式指的就是当某个行为有多种实现方式并且随着时间的发展还可能有更多的实现方式时,可以让这些具体实现继承自某个基类或者实现某个共同的接口,从而在调用策略(实现)的时候就不用考虑具体的实现。策略模式很好的实现了行为和行为的实现之间的分离,使得行为的调用更加稳定(不需要随着实现的改变而改变调用)。比如说,要实现一个排序算法,已有的排序算法有冒泡、选择、快速排序、桶排序等,这是就可以定义一个排序接口,然后让冒泡、选择等都实现此接口,这样就可以通过调用接口来实现对具体算法的调用(用实现公共接口的类来实例化接口)。

二、通过基类来实现策略模式

  假设有Bee,Bird,Butterfly三种会飞的动物,它们在攻击之前都会有一次飞行行为,现在我们通过策略模式来实现三种飞行动物的攻击行为,以使得客户端调用的时候不必考虑具体的对象和实现。(说明:为演示方便起见,抽象策略类和具体策略类访问权限都设置为默认,实际设计中一般将抽象策略类和具体策略类都定义为public以便在客户端调用)

  

//抽象策略类abstract class Attack{  public void fly(){    System.out.println("Attack fly()");  }  public abstract void attack();}

//具体策略类-Beeclass Bee extends Attack{  public void attack(){    System.out.println("Bee attack()");  }}

//具体策略类-Birdclass Bird extends Attack{  public void attack(){    System.out.println("Bird attack()");  }}

//具体策略类-Butterflyclass Buterfly extends Attack{  public void attack(){    System.out.println("Butterfly attack()");  }}

public class AttackTest{  private Attack a;

  public static void main(String[] args){    //根据具体需求实例化抽象基类    a =new Bird();   

    //实现攻击    a.attack();           }}

三、通过接口实现策略模式

  假设现在需要实现某个排序功能,已有的排序算法有选择、冒泡、桶排序等;下面我们使用排序接口通过策略模式来加以实现;

//抽象排序接口public interface ISort{  void sort(int[] a);}

//具体排序算法-冒泡排序public class MaoPaoSort implements ISort{  void sort(int[] a){    ...//具体实现忽略  }}

//具体排序算法-桶排序public class TongSort implements ISort{  void sort(int[] a){    ...//具体实现忽略  }}

//客户端调用排序算法public class SortTest{  //根据需要将接口实例化  private Sort s=new TongSort();

  static void sortTest(int[] a){    s.sort(a);  }

  public static void main(String[] args){    int[] a={1,2,5,4,2};    sortTest(a);  }}

四、总结

  一般来说,策略模式主要的作用就是将方法的调用和具体的实现相分离,保证即使实现改变了,客户端调用也不需要改变。至于是选择通过抽象类还是通过接口来实现策略模式则看具体情况,一般而言,如果确定几个具体实现之间有公共的实现部分,比如说打印功能,无论是在控制台打印还是在打印机上打印都会先生成打印字符串,那么打印策略就可以使用抽象类来实现,以便将生成字符串那部分代码在抽象类中直接实现,避免在具体实现中重复写代码;否则就使用接口来实现策略模式。

  

时间: 2024-10-08 23:25:44

用java实现策略模式的相关文章

java笔记--策略模式和简单工厂模式

策略模式: --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3884781.html "谢谢-- 为什么使用:策略模式主要用于有很多不同的方式来解决同一个问题的情景.如:文件的保存:可保存成txt,也可保存成xml.另外压缩文件.商场的促销策略等是类似的 如何使用:需要定义一个接口或者抽象类来表示各种策略的抽象,由于在选择适当的策略上有些不方便,需要不断地判断需要的类型,因此需要用简单工厂方法来实现判断过程 例子: 用策略模式实现图

java设计模式-策略模式

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

java -设计模式-策略模式

策略模式其实就是对各种行为算法的包装,各种不同的行为的算法的分离.属于对象的行为模式. 策略模式类图,比较简单,没有自己画,是窃取别人的. 策略模式角色划分 Strategy 策略接口或者(抽象策略类),定义策略执行接口 ConcreteStrategy 具体策略类 Context 上下文类,持有具体策略类的实例,并负责调用相关的算法 Demo:使用场景,加入有一个简单的爬虫系统,每个网站都会有单独的类或者接口服务爬取相关的服务. 比如,爬取招标网的信息,爬取财经网的信息等等. //爬取 pub

Java记录 -68- Java实现策略模式

Java实现策略模式 策略模式的编写步骤: 1. 对策略对象定义一个公共接口: 2. 编写策略类,该类实现了上面的公共接口: 3. 在使用策略对象的类中保存一个对策略对象的引用: 4. 在使用策略对象的类中,实现对策略对象的set和get方法(注入)或者使用构造方法完成赋值 代码实例实现简单的加减乘除运算. 策略接口: public interface Strategy {     public int calculate(int a, int b); } 策略类: public class A

策略模式(Strategy Method)

策略模式可以看做“可插入式算法(Pluggable)”,将子类各自的行为和公共的逻辑分离开来,将子类的行为抽象为算法插入到公共的逻辑中,这样替换子类的行为也不会对公共逻辑产生影响,也不会影响到调用类的逻辑. 下面是一个策略模式的简单例子,类图如下: 公共逻辑Context的代码如下: public class Context{ public void contextInterface(){ //add common code here strategy.strategyInterface();

Java 策略模式

Java 策略模式 @author ixenos 定义 1.封装算法:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换 2.分割行为和环境:对用户屏蔽内部实现,使客户端在调用算法的时候能够互不影响地互换 策略模式的实现(面向接口编程) 方法: 1.接口多态:策略模式的用意是针对一组算法,将每个算法封装到具有共同接口的独立的类中,从而使他们之间可以相互替换 2.具体策略提供不同算法,环境负责维持和查询策略,把具体策略和环境分割开来,使得算法可以在不影响客户端和环境的情况下修改 角色分工:

JAVA设计模式(16):行为型-策略模式(Strategy)

场景 某个市场人员接到单后的报价策略(CRM系统中常见问题)报价策略很复杂,可以简单做如下分类: 普通客户小批量报价 普通客户大批量报价 老客户小批量报价 老客户大批量报价 具体选用哪个报价策略,这需要根据实际情况来确定.这时候,我们采用策略模式即可. 我们先采用条件语句处理 public class Test { public double getPrice(String type,double price){ if(type.equals("普通客户小批量")){ System.o

【设计模式】Java设计模式第零课之策略模式

从今天开始看<<Head First 设计模式>>,打算每学习一章都写一篇笔记,今天的第零篇希望是一个好的开端,能够善始善终.加油. 设计模式入门:策略模式(看实际的需求(情景)是什么,采用适当的策略) 设计原则零:不管当初软件设计的多好,一段时间之后总是成长和改变的,否则软件就会死亡. 设计原则一:找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起 把会变化的部分取出并封装起来,好让其他部分不会受到影响 这样代码引起的不经意后果变少,系统变得更有弹性

Java 设计模式之 策略模式

思维导图: 我们先来看 STRATEGY 设计模式的通俗解释: 跟不同类型的MM约会,要用不同的策略,有的请电影比较好,有的则去吃小吃效果不错,有的去海边浪漫最合适,但目的都是为了得到 MM 的芳心,我的追 MM 锦囊中有好多 Strategy 哦.策略模式: 策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换. 策略模式使得算法可以在不影响到客户端的情况下发生变化.策略模式把行为和环境分开.环境类负责维持和查询行为类,各种算法在具体的策略类中提供.由于算