策略模式着重封装替换 不同的算法或行为,以便在运行时进行选择。

Simple example - Computer and USB interface

现代人对计算机、USB接口还有各种设备之间的关系都很熟悉,而这些由模块组成的系统正是策略模式的最佳范例。

  1. 定义策略的接口
public interface USB {
public void read();
}
  1. 接口实现 —— 每个接口实现类就是单个策略

    为了保持简单,我们只为USB接口定义一个读取数据方法read(),

    接下来就是各种USB设备实现类了,其中键盘、鼠标分别定义各自的实现类。
public class KeyBoard implements USB{

    @Override
public void read() {
System.out.println("读取键盘数据...");
}
} public class Mouse implements USB{ @Override
public void read() {
System.out.println("读取鼠标数据...");
}
}
  1. 计算机主类

    所有USB设备类都实现了USB接口的读取数据方法read(),如键盘设备捕获的是键盘指令数据,鼠标设备捕获的是坐标与点击指令数据。最后,我们需要将它们与计算机主机进行接驳起来。
public class Computer {

    private USB usb;

    public void setUSB(USB usb){
this.usb = usb;
} public void do(){
usb.read();
}
}
  1. use

    接驳起来之后,只需要根据场景设置好USB设备对象,调用电脑的.do方法即可。
public static void main(String[] args) {
Computer computer = new Computer(); computer.setUSB(new KeyBoard());
computer.do(); computer.setUSB(new Mouse());
computer.do();
}

Input:

读取键盘数据...
读取鼠标数据...

The difference between the two

策略模式和多态在使用场景上,还是很类似的。

但总体来说,策略模式更像多态的升级版本,策略模式更灵活,它依靠接口,而不是继承,所以有更多操作空间。

如果设计的程序比较小,不是那么复杂,使用多态就行,如果稍微大型(复杂)一点,考虑用策略模式。

Reference

Java Polymorphism Concept

https://www.cnblogs.com/mysticbinary/p/17645988.html

Strategy Pattern and Polymorphism —— Behavioral Class的更多相关文章

  1. 设计模式(一):“穿越火线”中的“策略模式”(Strategy Pattern)

    在前段时间呢陆陆续续的更新了一系列关于重构的文章.在重构我们既有的代码时,往往会用到设计模式.在之前重构系列的博客中,我们在重构时用到了“工厂模式”.“策略模式”.“状态模式”等.当然在重构时,有的地 ...

  2. 深入浅出设计模式——策略模式(Strategy Pattern)

    模式动机 完成一项任务,往往可以有多种不同的方式,每一种方式称为一个策略,我们可以根据环境或者条件的不同选择不同的策略来完成该项任务.在软件开发中也常常遇到类似的情况,实现某一个功能有多个途径,此时可 ...

  3. [转]设计模式(22)-Strategy Pattern

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

  4. 设计模式 - 策略模式(Strategy Pattern) 具体解释

    策略模式(Strategy Pattern) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26577879 本文版权全 ...

  5. 第 1 章 策略模式【Strategy Pattern】

    第 1 章 策略模式[Strategy Pattern] 以下内容出自: 24种设计模式介绍与6大设计原则.pdf 刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手 ...

  6. HeadFirst设计模式读书笔记(1)-策略模式(Strategy Pattern)

    策略模式(Strategy Pattern): 定义了了算法簇,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户端. 第一个设计原则:找出应用中可能需要变化之处,把他们独立 ...

  7. 乐在其中设计模式(C#) - 策略模式(Strategy Pattern)

    原文:乐在其中设计模式(C#) - 策略模式(Strategy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 策略模式(Strategy Pattern) 作者:webabc ...

  8. 第21章 策略模式(Strategy Pattern)

    原文 第21章 策略模式(Strategy Pattern) 策略模式 导读:策略模式看完之后,大多数人都会感觉有点混了,包括我,感觉策略模式是一种OO思想的体现(纯属个人拙见). 概述:       ...

  9. 反馈法学习设计模式(一)——策略模式Strategy Pattern

    简介(Introduction) 之前学习Java8实战时,遇到一个很好的策略模式示例.便想着借着这个示例结合反馈式的方法来,学习策略设计模式,也以便后面反复琢磨学习. 首先我们通过练习,逐步写出符合 ...

  10. 设计模式之策略模式(Strategy Pattern)

    模板方法是通过继承实现的,在父类中定义出算法的骨架,将不同点在子类中实现.而策略模式是通过接口实现的,策略中定义了完整的算法.它们有点像啊-- 策略模式的定义 策略模式(Strategy Patter ...

随机推荐

  1. Element Cascader 级联选择器去除空叶子节点

    此处以后端获取部门级联List为例 以下为数据结构 { data: { children: [ 0:{childre:[ 0:{}, 1:{} ]}, 1:{}, 2:{}, 3:{}, 4:{}, ...

  2. 去掉DosBox烦人的Status Windows

    首先我们上成品动态图 很干净,很清爽有没有! 步骤 1.找到并选中DosBox快捷方式,鼠标右键点击选择属性 2.修改目标后面的参数,默认是 -userconf ,再添加一个 -noconsole 就 ...

  3. SpringMVC 解决中文乱码问题以及前后端Json格式数据交互的测试

    1.今日遇到的报错: 跳转网页出现404原因: 1.检查project structure里面的webapp路径是否正确: 2.检查project structure里的artifaccts里的WEB ...

  4. python如何利用算法解决业务上的【分单问题】

    分单是很多企业日常工作中非常典型的一项内容,它非常复杂,但同时又极为重要,如何合理的分单是企业管理中一个很重要的课题. 之所以说分单很复杂,是因为影响单据该分给谁,分多少量这个事儿本身就有太多的影响因 ...

  5. GaussDB(DWS)迁移实践丨row_number输出结果不一致

    摘要:迁移前后结果集row_number字段值前后不一致,前在DWS上运行不一致. 本文分享自华为云社区<GaussDB(DWS)迁移 - oracle兼容 --row_number输出结果不一 ...

  6. ping不通能curl通

    今天发现一个域名或ip居然在ping不通的情况下能curl通,以前的思维定式直接给整破防了啊!!! 涨见识了,具体原因和原理后续补充~

  7. CentOS 8 已是绝版?还有后续么?

    文章由 Linux爱好者( ID: LinuxHub)整理自开源中国 + 红帽官方.本文章经原作者同意后授权转载. 2020年12月8日,CentOS 项目宣布,CentOS 8 将于 2021 年底 ...

  8. Galaxy生物信息分析平台的数据集对象清理

    由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. Galaxy Project 是在云计算背景下诞生的一个生物信息学可视化分析开源项目.该项目由 ...

  9. 从 0 到 1 搭建自己的脚手架(java 后端)

    一.脚手架是什么 脚手架是一种基础设施工具,用于快速生成项目的框架代码和文件结构.它是一种标准化的开发工具,使开发人员能够在项目的早期阶段快速搭建出一个具备基本功能和结构的系统. 二.脚手架的意义 主 ...

  10. 园子的商业化努力-行行AI人才培养「常青藤计划」

    各位园子的小伙伴: 感谢大家长期对园子的支持,AI大模型出现之后,各行各业都在积极思考如何应对,如何把业务场景和AI结合.在这个过程中,AI人才缺乏是最核心的问题. 基于此,园子打算在AI人才培养方面 ...