Strategy Pattern and Polymorphism —— Behavioral Class
阅读原文时间:2023年08月29日阅读:1

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

Simple example - Computer and USB interface

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

  1. 定义策略的接口

    public interface USB {
    public void read();
    }

  2. 接口实现 —— 每个接口实现类就是单个策略

    为了保持简单,我们只为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("读取鼠标数据...");
    }

    }

  3. 计算机主类

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

    public class Computer {

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

    }

  4. 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

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器