继续java的视频学习,博客还是不能丢,要坚持!Strategy策略模式是23个设计模式之一,是我们常用的模式之一。

Strategy策略模式:

体现了两个非常基本的面向对象设计原则:

---封装变化概念

---编程中受用接口,而不是对接口的实现

1.定义:

定义一组算法,讲每个算法都封装起来,使它们之间可以互换;

使在客户端调用它们的时候能够互不影响的变化。

2.组成:

抽象策略角色:策略类,通常有一个接口或者抽象类实现;

具体策略角色:包括了相关算法的行为;

环境角色:持有一个策略类的引用,最终给客户端调用。

3.实现:

针对一组算法,将每一个算法封装到具有接口的独立类中,从而使他们可以互相替换;可以在不影响客户端的情况下发生变化,可以把行为和环境分开。环境类负责维持和查询行为类各种算法则在具体策略中提供。由于算法和环境独立开来,算法的修改都不会影响客户端。

4.编写步骤:

1)对策略对象定义一个公共接口;

2)编写策略类,该类实现了上面的公共接口,

3)在使用策略对象的类中保存一个策略对象的引用,

4)在策略对象的类中,实现策略对象的set和get方法,

5)使用构造方法完成赋值;

5.缺点:

客户端必须知道所有的策略类,并自行决定使用哪一个策略类;造成很多策略类,维护代价很高;

解决方法:工厂方法(factory method)。

6.实例:

package StrategyTest;//Strategy接口
public interface Strategy { //1)对策略对象定义一个公共接口public int calculate(int a,int b);//定义一个计算器的方法,接受两个整形参数}//2)编写策略类,该类实现了上面的公共接口,
package StrategyTest;//加运算
public class AddStretegy implements Strategy{//重写接口的calculate方法,返回a+b
public int calculate(int a, int b) {return a+b;
}}package StrategyTest;//减运算
public class SubtractStrategy implements Strategy {//重写接口的calculate方法,返回a-b
public int calculate(int a, int b) {return a-b;
}}package StrategyTest;//除运算
public class SubtractStrategy implements Strategy {//重写接口的calculate方法,返回a/b
public int calculate(int a, int b) {return a-b;
}}package StrategyTest;//乘运算
public class DivideStrategy implements Strategy {//重写接口的calculate方法,返回a*b
public int calculate(int a, int b) {return a/b;
}
}package StrategyTest;
//3)在使用策略对象的类中保存一个策略对象的引用,public class Environment {private Strategy strategy;//4)在策略对象的类中,实现策略对象的set和get方法,public void setStrategy(Strategy strategy){this.strategy = strategy;
}public Strategy getStrategy(){return this.strategy ;
}
public int calculate(int a,int b){return strategy.calculate(a, b);
}
}package StrategyTest;public class Client {public static void main(String[] args) {
//5)使用构造方法完成赋值;AddStretegy add= new AddStretegy();Environment en = new Environment(add); System.out.println(en.calculate(3, 4));SubtractStrategy  sub = new SubtractStrategy();en.setStrategy(sub);System.out.println(en.calculate(5, 1));MultiplyStrategy mul = new MultiplyStrategy();en.setStrategy(mul);System.out.println(en.calculate(3, 4));DivideStrategy div = new DivideStrategy();en.setStrategy(div);System.out.println(en.calculate(3, 1));}}

运行结果:

参考:

张龙老师圣思园java教程。

Strategy策略模式详解与实例相关推荐

  1. 从java多态到策略模式_设计模式中的多态——策略模式详解

    2. 策略模式详解 2.1 策略模式定义 策略模式定义了一系列算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户端而独立的变化. 可以使用多态进行类比来理解策略模 ...

  2. 设计模式之策略模式详解

    设计模式之策略模式详解 概述 先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车.可以坐汽车.可以坐火车.可以坐飞机. 作为一个程序猿,开发需要选择一款开发工具,当然可以进行代码开发的工具有 ...

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

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

  4. 设计模式——策略模式详解

    0. 前言 写在最前面,本人的设计模式类博文,建议先看博文前半部分的理论介绍,再看后半部分的实例分析,最后再返回来复习一遍理论介绍,这时候你就会发现我在重点处标红的用心,对于帮助你理解设计模式有奇效哦 ...

  5. java策略模式详解_Java经典设计模式之策略模式原理与用法详解

    本文实例讲述了Java经典设计模式之策略模式.分享给大家供大家参考,具体如下: 策略模式指:策略模式指将程序中可变部分抽象分离成一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式 ...

  6. 学习笔记(20):第2章 架构师内功心法之设计模式 -策略模式详解

    立即学习:https://edu.csdn.net/course/play/28941/403582?utm_source=blogtoedu 策略模式:提供多种算法,由使用者来选择使用哪种方式来实现 ...

  7. java builder pattern_Java Builder Pattern建造者模式详解及实例

    Java Builder Pattern 1.概念 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. [构建与表示分离,同构建不同表示] 与抽象工厂的区别:在建造者模式里,有个指 ...

  8. 策略模式详解(英雄联盟上王者案例)

    "且听说书人把对和错变成利与弊,把铜板藏入衣袖笑着说道德里哪有枪和毙"

  9. 组合模式详解附有代码案例分析(包含透明组合模式、安全组合模式的代码示例)

    组合模式 一.组合模式的概念和角色 (一).组合模式的概念 (二).组合模式的角色 二.组合模式的应用场景 三.透明组合模式的代码示例 四.安全组合模式的代码示例 五.组合模式的优缺点 (一).优点 ...

  10. 模板方法模式详解附有代码案例分析(包含模板方法模式重构JDBC操作业务代码示例)

    模板方法模式 一.模板方法模式的概念和角色 (一).模板方法模式的概念 (二).模板方法模式的角色 二.模板方法模式的应用场景 三. 模板方法模式的代码示例 四.模板方法模式重构JDBC操作业务 五. ...

最新文章

  1. 深蓝学院的深度学习理论与实践课程:第四章
  2. python爬虫获取的网页数据为什么要加[0-使用 Python 爬取网页数据
  3. NFVI融合架构解决方案的四大特点—Vecloud微云
  4. html语言中项目列表的嵌套,做HTML嵌套列表的正确方法?
  5. 获取iOS任意线程调用堆栈(五)完整实现:BSBacktraceLogger
  6. java 静态块初始化_简单了解java中静态初始化块的执行顺序
  7. oracle索引sys_nc,通过dba_ind_columns表查到索引所在列的名字为SYS_NC00133$
  8. Centos7下python3安装ipython
  9. 转:gcc编译C++程序
  10. 基于LDAP的WebLogic虚拟化统一用户权限管理
  11. CF - 1214D
  12. 数据转换transform练习
  13. pert计算公式期望值_PERT方法:用于计算各工序和工时的方法
  14. Delphi外挂制作
  15. Win8操作系统下IIS如何配置asp.net的运行环境
  16. 期权套利组合 matlab,期权交易:简单套利组合
  17. 京东跨端组件库 NutUI 2.0 来袭
  18. 高等数学(第七版)同济大学 习题7-4 个人解答
  19. 【高等数学】第二章 导数与微分——第一节 导数的概念
  20. AD9361配置(1)

热门文章

  1. html5黑色主题登录网页,永恒经典 18个黑白灰配色的网页设计作品
  2. walking机器人仿真教程-应用-多点导航结合闹铃播放实现移动闹钟
  3. doom3 源代码基本情况
  4. Nagios下ndo2db服务启动脚本
  5. python统计字符串中大写英文、小写英文、汉字、数字等个数
  6. I盘显示无法访问数据错误(循环冗余检查),里面的资料怎么恢复
  7. Container及其内部进程监控剖析
  8. (附源码)springboot教材订购系统的开发毕业设计081419
  9. 联想微型计算机B3O5,联想B3一体电脑
  10. CPU卡FM1208发卡操作流程(不带密钥验证)