Strategy pattern and Polymorphism

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

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

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
2.
Strategy pattern and Polymorphism
3.
Strategy pattern and Polymorphism

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

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-663609.html

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

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

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

相关文章

  • 大话设计模式——18.策略模式(Strategy Pattern)

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

    2024年04月13日
    浏览(36)
  • 设计模式二十二:策略模式(Strategy Pattern)

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

    2024年02月11日
    浏览(26)
  • 设计模式-策略模式 Strategy

    该模式最常见的应用场景是,利用它来避免冗长的 if-else 或 switch 分支判断。不过,它的作用还不止如此。它也可以像模板模式那样,提供框架的扩展点等等。 策略模式,英文全称是 Strategy Design Pattern。该模式是这样定义的: Define a family of algorithms, encapsulate each one, and make

    2024年02月20日
    浏览(31)
  • 策略模式Strategy

    2024年02月12日
    浏览(43)
  • 策略模式(Strategy)

    策略模式是一种行为设计模式,就是定义一系列算法,然后 将每一个算法封装起来 ,并使它们 可相互替换 。本模式通过定义一组可相互替换的算法,实现将算法独立于使用它的用户而变化。 为实现一系列可相互替换的算法,可定义一个公共接口,然后定义一组实现该接口

    2024年02月14日
    浏览(38)
  • 策略模式(Strategy)

    策略 是一种行为设计模式,它能让你定义一系列算法,并将 每种算法分别放入独立的类中,以使算法的对象能够相互替换。 1. 问题 你打算为游客们创建一款导游程序。该程序的核心功能是提供美观的地图,以帮助用户在任何城市中快速定位。 用户期待的程序新功能是自动

    2024年02月12日
    浏览(27)
  • 虾皮一面:手写一个Strategy模式(策略模式)

    在40岁老架构师 尼恩的 读者交流区 (50+)中,最近有指导一个小伙伴面试架构师,面试的公司包括虾皮、希音、美团等大厂,目标薪酬50K以上,遇到了一个比较初级的问题: 请手写一个Strategy模式(策略模式) 或者请手写一个template模式(模板模式) 或者请手写一个proxy模式(

    2024年02月16日
    浏览(25)
  • Java设计模式之策略(Strategy)模式

    策略(Strategy)设计模式定义了一系列算法,将它们封装起来,并且可以相互替换使用,从而使得算法可以独立于使用它的客户而变化。 策略(Strategy)设计模式是一种行为型设计模式,它允许在运行时动态地选择算法。策略模式将算法封装为算法族,从而可以在运行时根据

    2024年02月15日
    浏览(36)
  • 【设计模式-02】Strategy策略模式及应用场景

    Java 官方文档 Overview (Java SE 18 JDK 18) module index https://docs.oracle.com/en/java/javase/18/docs/api/index.html Java中使用到的策略模式 Comparator、comparable Comparator (Java SE 18 JDK 18) declaration: module: java.base, package: java.util, interface: Comparator https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/util/Compar

    2024年01月16日
    浏览(36)
  • 【设计模式-03】Strategy策略模式及应用场景

    Java 官方文档 Overview (Java SE 18 JDK 18) module index https://docs.oracle.com/en/java/javase/18/docs/api/index.html Java中使用到的策略模式 Comparator、comparable Comparator (Java SE 18 JDK 18) declaration: module: java.base, package: java.util, interface: Comparator https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/util/Compar

    2024年01月22日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包