Strategy Pattern and Polymorphism —— Behavioral Class

这篇具有很好参考价值的文章主要介绍了Strategy Pattern and Polymorphism —— Behavioral Class。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

策略模式很类似现在多功能的洗衣机,每次在洗衣服之前,都需要由用户自己选择想要的洗衣策略,洗衣机收到指定的洗衣策略后,组合成一份新的算法和数据结构才去执行。
Strategy Pattern and Polymorphism —— Behavioral Class

Strategy Pattern and State Pattern

策略模式和状态模式的区别在于使用者对它们的目的
策略模式主要用于实现算法的选择和动态切换,强调的是不同策略的独立性和替换性。
状态模式主要用于根据对象的内部状态来改变对象的行为,强调的是对象状态的变化和相应行为的变化。

但其实,你把这个状态想成策略,策略替换成状态,也没啥区别。

Strategy Pattern and Polymorphism

策略模式多态在使用场景上,还是很类似的。
但总体来说,策略模式更像多态的升级版本,策略模式更灵活,它依靠接口,而不是继承,所以有更多操作空间。
如果设计的程序比较小,不是那么复杂,使用多态就行,如果稍微大型(复杂)一点,考虑用策略模式。

What is Strategy Pattern and State Pattern

将类的行为和状态绑定在一起,不同的状态对应不同的行为。
将类的行为和策略绑定在一起,不同的策略对应不同的行为。

Key Elements

  • 环境(Context):维护一个当前状态对象的引用,负责将请求委派给当前状态对象来处理。
  • 抽象状态(State):定义了一个接口,用于封装与环境对象的特定状态相关的行为。
  • 具体状态(Concrete State):实现了抽象状态接口,定义了该状态下具体的行为。
  • Client

Strategy Pattern VS State Pattern

我在网上找了两个模式的简单示例代码,经过对比分析,唯一的不同就是状态和策略这两个类的名字不一样,其他都是
1.
Strategy Pattern and Polymorphism —— Behavioral Class
2.
Strategy Pattern and Polymorphism —— Behavioral Class
3.
Strategy Pattern and Polymorphism —— Behavioral Class

Strategy Pattern 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 execute(){
        usb.read();
    }
}
  1. use
    接驳起来之后,只需要根据场景设置好USB设备对象,调用电脑的.do方法即可。
public static void main(String[] args) {
    Computer computer = new Computer();

    computer.setUSB(new KeyBoard());
    computer.execute();

    computer.setUSB(new Mouse());
    computer.execute();
}

Input:

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

Example —— 扫描器基于自定义配置切换不同扫描策略

todo

Usage Scenarios

先来看看阿里的开发手册
Strategy Pattern and Polymorphism —— Behavioral Class

Reference

Java Polymorphism Concept
https://www.cnblogs.com/mysticbinary/p/17645988.html

Java开发手册(嵩山版).pdf
https://www.haicheng.website/download/book/Java开发手册(嵩山版).pdf文章来源地址https://www.toymoban.com/news/detail-664209.html

到了这里,关于Strategy Pattern and Polymorphism —— Behavioral Class的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 策略模式【Strategy Pattern】

    刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题, 嘿,还别说,真是解决了大问题,搞到最后是周瑜陪了夫人又折兵呀,那咱们先看看这个场景是什么样子 的。 1 先说这个场景中的要素: 三个妙计 一个锦囊 一个赵云 妙计

    2024年02月13日
    浏览(29)
  • 大话设计模式——18.策略模式(Strategy Pattern)

    简介 是一系列算法的封装,即做的事情相同(方法名称相同)但是实现的方式不同,以相同方式调用所有的算法,减少算法与使用算法的耦合。直接调用方法。 UML图 应用场景 Java AWT中的LayoutManager(布局管理器) 系统中存在多个类,它们的区别仅在于它们的行为 不希望暴露

    2024年04月13日
    浏览(36)
  • Technology strategy Pattern 学习笔记3-Creating the Strategy-Industry context

    Creating the Strategy-Industry context 1.1 create steps 1.与内部各方沟通 了解企业的人、流程和技术,包括与其它企业的不同 了解哪些创新可以做 竞争者及市场信息 企业可以支撑的类似业务 按SWOT四象限分类,先做列表后放入象限 1.2 四象限 1.2.1 S优势(Strengths)、W劣势(Weaknesses)、

    2024年02月05日
    浏览(25)
  • 设计模式二十二:策略模式(Strategy Pattern)

    定义一系列算法,将每个算法封装成独立的对象,并使这些对象可互相替换。这使得在运行时可以动态地选择算法,而不必改变使用算法的客户端代码。策略模式的主要目标是将算法的定义与使用分离,使得客户端可以根据需要灵活地选择和切换不同的算法,而不影响到客户

    2024年02月11日
    浏览(26)
  • Factory Pattern —— Creational Class

    工厂方法模式是比较有 启发 的一个模式,它告诉我们可以通过增加新的对象专门管理“变化”。 例如,我们为了解决new()引起的“变化”,就引入了工厂类型,由新增的工厂类型专门处理new()相关的“变化”,确保客户程序不受这些变化的直接影响。 这个其实就是很典型的

    2024年02月11日
    浏览(25)
  • Prototype Pattern —— Creational Class

    在Java中,Cloneable 接口是一个标记接口(Marker Interface,它们内部都没有方法和属性),实现Cloneable接口表示该对象能被克隆,能使用Object.clone()方法。 要实现克隆功能,需要满足以下两个条件: 类实现了 Cloneable 接口。 在类中重写 clone() 方法。 为了方便记忆,原型模式也叫

    2024年02月11日
    浏览(29)
  • Builder Pattern —— Structure Class

    建造者模式又称为 生成器模式 ,主要用于对复杂对象的构建、初始化,它可以 将多个简单的组件对象按顺序一步步组装起来 , 最终构建成一个复杂的成品对象 。 与工厂系列模式不同的是,建造者模式的主要目的在于把烦琐的 构建过程 从不同对象中抽离出来,使其脱离并

    2024年02月10日
    浏览(25)
  • Flyweight Pattern —— Creational Class

    享元模式在主流的标准里是放到结构大类下的,但是我感觉这个模式的最终作用也是为了获取一个类,所以我将其划分到创建大类下。 Flyweight 是指轻量级的。 享元模式旨在支持大量细粒度的对象共享,以减少内存消耗。该模式通过共享相似对象的部分状态,来减少对象的数

    2024年02月10日
    浏览(32)
  • 《重构》:Extract Class and Inline Class

    i fork a rep, this the link GitHub - TIMPICKLE/refator-code: 重构 - 改善既有代码的设计 all right, lets see the genel description. 提取类 对立: 内联类 目的:将大类分成小类 场景:维护一个大量函数和数据的类 内联类 对立: 提炼类 目的:减少不必要的类 场景: 如果一个类不再承担足够的责任

    2024年02月11日
    浏览(35)
  • Java Polymorphism Concept

    这个多态看中文确实有点费解,多态的英文是Polymorphism,它的翻译含义是: n. 多态性 (可以看出是比较宽泛的) n. 多型现象 从翻译也看不出啥, 我举一个生活中的例子来引入多态: 生活中有很多常见的物体具有多态性。例如,一张纸可以用来写字、画画,也可以用来包裹东

    2024年02月12日
    浏览(98)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包