对于策略模式,我在很多面试题上看到过考察这一类的问题,这种模式也的确比较好用。 我感觉这种模式就是将不同实现的方法放到一个接口中,然后通过实现这个接口来实现不同的运行结果,这种模式有三部分构成: 策略接口 策略实现类 策略作用类(使用策略的类) 网络上的专业解释:

此模式下,一个类的行为或者其算法可以在运行时更改,我们要定义一系列的算法,把他们一个个封装起来,并使他们可以相互替换。

实例:用此模式描述四则运算,可不断替换。

以下是我对此实例做的类图:

以下是我编写代码: 1.创建策略接口,用来存放四则运算计算器中的不同运行的方法

//策略接口

interface Strategy {

int doAction(int num1,int num2);

}

2.创建实现策略接口的四则计算实现类

public class AddStrategy implements Strategy {

@Override

public int doAction(int num1, int num2) {

return num1+num2;

}

}

public class SubtractStrategy implements Strategy{

@Override

public int doAction(int num1, int num2) {

return num1-num2;

}

}

public class MultiplyStrategy implements Strategy {

@Override

public int doAction(int num1, int num2) {

return num1*num2;

}

}

public class DivisionStrategy implements Strategy {

@Override

public int doAction(int num1, int num2) {

return num1/num2;

}

}

3.创建一个使用某种策略的类,可以根据需求不同来使用不同的策略

public class Calculator {

private int num1;

private int num2;

public Calculator(int num1, int num2) {

this.num1 = num1;

this.num2 = num2;

}

public int operate(Strategy strategy){

return strategy.doAction(num1, num2);

}

}

4.创建测试类,使用不同的策略来实现需求

public class Test {

public static void main(String[] args) {

System.out.println("=========加法计算器==========");

Calculator calculator=new Calculator(1, 2);

System.out.println("1+2="+calculator.operate(new AddStrategy()));

System.out.println("=========减法计算器==========");

Calculator calculator1=new Calculator(10, 20);

System.out.println("10-20="+calculator1.operate(new SubtractStrategy()));

System.out.println("=========乘法计算器==========");

Calculator calculator2=new Calculator(3, 5);

System.out.println("3*5="+calculator2.operate(new MultiplyStrategy()));

System.out.println("=========除法计算器==========");

Calculator calculator3=new Calculator(10, 2);

System.out.println("10/2="+calculator3.operate(new DivisionStrategy()));

}

}

5.后台输出

=========加法计算器==========

1+2=3

=========减法计算器==========

10-20=-10

=========乘法计算器==========

3*5=15

=========除法计算器==========

10/2=5

看完代码之后,大家是不是感觉这种模式与状态模式是差不多的,是差不多,他俩原理都是用的覆盖嘛,但是状态模式的状态作用者里面要用到状态的实例对象,但是这个策略模式的策略使用者却是将策略当做参数来传入的,这样减少了对象的创建,提高了性能。

这种模式的优点:

1.如果我们要加一个相反数策略的话,只需要实现策略接口即可,体现了易扩展性,符合”开闭原则”。

2.算法在客户端可以根据需要自由切换,适应了不同需求。

3.在客户端使用将策略对象参数化的方法来调用具体策略的方法,避免在客户端新建对象实例,提高系统性能。

缺点:

1.策略使用类要知道所有的策略类才行,然后才能自行决定要用哪一个策略。

2.随着策略的不断增多,策略类也会不断的增多,提高后期的维护困难性。

java计数器策略模式_java设计模式(二十一)--策略模式相关推荐

  1. java的简单工厂模式_java设计模式之简单工厂模式

    简单工厂模式的概念 就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建.简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例. ...

  2. java 外观模式_Java设计模式11:外观模式

    外观模式 外观模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的外观对象进行.外观模式是一个高层次的接口,使得子系统更易于使用. 医院的例子 现代的软件系统都是比较复杂的.假如把医院比作一 ...

  3. java 桥接模式_JAVA设计模式之【桥接模式】

    桥接模式 蜡笔中颜色和型号之间存在耦合 毛笔中,颜色和型号解耦了 如果软件系统中某个类存在两个独立变化的维度,桥接模式可以将两个维度分离出来 角色 抽象类 扩充抽象类 实现类接口 提供基本操作 抽象类 ...

  4. 【白话设计模式二】外观模式(Facade)

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factory) [白话设计模式二] ...

  5. java的visitor模式_java设计模式(二十一)访问者模式(Visitor)

    介绍 访问者模式(Visitor Pattern):表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作.访问者模式是一种对象行为型模式. 简单来 ...

  6. Java设计模式之十一 ---- 策略模式和模板方法模式

    前言 在上一篇中我们学习了行为型模式的访问者模式(Visitor Pattern)和中介者模式(Mediator Pattern).本篇则来学习下行为型模式的两个模式,策略模式(Strategy Pa ...

  7. Java进阶篇设计模式之十一 ---- 策略模式和模板方法模式

    前言 在上一篇中我们学习了行为型模式的访问者模式(Visitor Pattern)和中介者模式(Mediator Pattern).本篇则来学习下行为型模式的两个模式,策略模式(Strategy Pa ...

  8. java策略模式_Java设计模式之策略模式详解

    本文实例为大家分享了Java策略模式,供大家参考,具体内容如下 1.策略模式(Strategy Pattern)是一种比较简单的模式,也叫做政策模式(PolicyPattern). 定义如下: Def ...

  9. java 行为模式_java设计模式--行为模式

    前言 行为模式是描述多个类与对象之间通过协作共同完成单个对象无法单独完成的任务. 行为模式分为: 类行为模式通过集成在类之间分派行为 对象行为模式通过组合或聚合在对象之间分配行为 行为模式: 模板方法 ...

最新文章

  1. VC采集网页所有表单域
  2. MVVM Template
  3. java map中的entry_java中Map及Map.Entry详解(组图)
  4. Python数据结构和算法
  5. Android手机产线测试模块,基于Android平台智能手机可靠性生产测试模式的实现
  6. mysql datetime不支持小数_如何从python向MYSQL中插入空小数/datetime?
  7. GitBucket管理员添加人员
  8. 面向对象-反射和__getattr__系列
  9. 获得Oracle中刚插入的数据的ID(for produce)
  10. 开发imageJ插件失败经验
  11. 将PDF文件进行文件的编辑需要利用什么软件
  12. 室内外无缝定位导航,GPS系统可以实现吗?
  13. ANDROID 有关高德地图 导航SDK 组件不见的问题
  14. 1041 例题4-2 比较交换实数值
  15. rimraf与windows的rmdir简单使用命令方法
  16. python 02 --python从安装到学习精品网站(廖雪峰官方网站)
  17. 蚂蚁金服蒋国飞:区块链商用时代正在加速到来
  18. 什么是计算机网络AP,无线AP是什么
  19. 广西工学院2000级计算机系,潘盛辉(电子信息与控制工程系)老师 - 广西工学院 - 院校大全...
  20. 混合动作空间(Dis_Conti_Hybrid)

热门文章

  1. 重磅!阿里云发布业界首款SaaS化防火墙
  2. 注释那些事儿:前端代码质量系列文章(一)
  3. 云原生时代老牌IDC巨头谋求转型,世纪互联成立新品牌“互联科技(NEOLINK)”
  4. 《2021中国数据资产化工具市场研究报告》隆重发布
  5. 2019年中国IaaS公有云市场排名及份额出炉
  6. 腾讯车联发布TAI3.0:三步实现汽车智能进化,2个月快速上车
  7. 2019报告:AI程序员人才需求暴涨35倍!每10个公司就有6个人才缺口
  8. Aruba 推出Instant On 为中小型企业提供安全、高速的无线连接
  9. K8S精华问答 | 如何监控部署在Docker容器上的应用程序?
  10. 2018年云计算大调查:五成开发者月入过万 阿里云称霸公有云市场