博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
策略模式
阅读量:5271 次
发布时间:2019-06-14

本文共 2145 字,大约阅读时间需要 7 分钟。

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

策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。

 

 

统一接口

public interface ICalculator{

  public int calculate(String exp);
}

 

公共抽象父类,封装公共方法(没有公共代码可以不用抽象父类)

public abstract class AbstractCalculater{

  public int[] split(String exp, String opt){
    String array[] = exp.split(opt);
    int arrayInt[] = new int[2];
    arrayInt[0] = Integer.parseInt(array[0]);
    arrayInt[1] = Integer.parseInt(array[1]);
    return arrayInt;
  }
}

 

 

三个算法实现类

public class Plus extends AbstractCalculator implements ICalculator{
  @Override
  public int calculate(String exp){
    int arrayInt[] = split(exp, "+");
    return arrayInt[0] + arrayInt[1];
  }
}

public class Minus extends AbstractCalculator implements ICalculator{

  @Override
  public int calculate(String exp){
    int arrayInt[] = split(exp, "-");
    return arrayInt[0]-arrayInt[1];
  }
}

public class Multiply extends AbstractCalculator implements ICalculator{

  @Override
  public int calculate(String exp){
    int arrayInt[] = split(exp, "*");
    return arrayInt[0] + arrayInt[1];
  }
}

 

测试类

public class StrategyTest{
  public static void main(String[] args){
    String exp = "5*5";
    ICalculator cal = new Multiply();
    int result = cal.calculate(exp);
    System.out.println(result);
  }
}

 

 

认识策略模式

  策略模式的重心

  策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。

  算法的平等性

  策略模式一个很大的特点就是各个策略算法的平等性。对于一系列具体的策略算法,大家的地位是完全一样的,正因为这个平等性,才能实现算法之间可以相互替换。所有的策略算法在实现上也是相互独立的,相互之间是没有依赖的。

  所以可以这样描述这一系列策略算法:策略算法是相同行为的不同实现。

  运行时策略的唯一性

  运行期间,策略模式在每一个时刻只能使用一个具体的策略实现对象,虽然可以动态地在不同的策略实现中切换,但是同时只能使用一个。

  公有的行为

  经常见到的是,所有的具体策略类都有一些公有的行为。这时候,就应当把这些公有的行为放到共同的抽象策略角色Strategy类里面。当然这时候抽象策略角色必须要用Java抽象类实现,而不能使用接口。

 

 

策略模式的优点

  (1)策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了一个算法或行为族。恰当使用继承可以把公共的代码移到父类里面,从而避免代码重复。

  (2)使用策略模式可以避免使用多重条件(if-else)语句。多重条件语句不易维护,它把采取哪一种算法或采取哪一种行为的逻辑与算法或行为的逻辑混合在一起,统统列在一个多重条件语句里面,比使用继承的办法还要原始和落后。

策略模式的缺点

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

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

 

转载于:https://www.cnblogs.com/wwwx/p/6237032.html

你可能感兴趣的文章
2019春 软件工程实践 助教总结
查看>>
Zerver是一个C#开发的Nginx+PHP+Mysql+memcached+redis绿色集成开发环境
查看>>
程序的静态链接,动态链接和装载 (补充)
查看>>
关于本博客说明
查看>>
[Kaggle] Sentiment Analysis on Movie Reviews
查看>>
价值观
查看>>
mongodb命令----批量更改文档字段名
查看>>
MacOS copy图标shell脚本
查看>>
国外常见互联网盈利创新模式
查看>>
android 签名
查看>>
android:scaleType属性
查看>>
mysql-5.7 innodb 的并行任务调度详解
查看>>
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>
Js时间处理
查看>>
【雷电】源代码分析(二)-- 进入游戏攻击
查看>>
Linux中防火墙centos
查看>>
如何设置映射网络驱动器的具体步骤和方法
查看>>
centos下同时启动多个tomcat
查看>>
Jmeter接口压力测试,Java.net.BindException: Address already in use: connect
查看>>