Android常见设计模式:什么是命令模式?

2024-11-22 08:20 Android常见设计模式:什么是命令模式?已关闭评论

Android 开发中的命令模式

1. 什么是命令模式?

命令模式(Command Pattern)是一种行为型设计模式,它将“请求”封装成一个对象,使得可以用不同的请求、队列、日志、撤销和恢复操作来参数化其他对象。

简单类比:
遥控器是命令模式的经典例子。遥控器上的每个按钮(命令)执行不同的功能(如开灯、关灯、调节音量)。遥控器的功能可以随时更改,而不需要改变按钮本身的设计。


2. 命令模式的核心组成部分

  1. Command(命令接口):定义命令执行的方法。
  2. ConcreteCommand(具体命令类):实现 Command 接口,封装一个或多个接收者的操作。
  3. Receiver(接收者):实际执行命令的对象。
  4. Invoker(调用者):持有命令并触发执行。
  5. Client(客户端):创建命令对象,并将其分配给调用者。

3. UML 类图

以下是命令模式的 UML 类图,标注了具体的关系。


4. 代码示例:遥控器开关灯功能

假设需要实现一个遥控器来控制灯的开关,使用命令模式的实现如下:

// Command: 命令接口
interface Command {
    void execute();
}

// Receiver: 接收者类,实际执行命令的逻辑
class Light {
    public void turnOn() {
        System.out.println("灯已打开");
    }

    public void turnOff() {
        System.out.println("灯已关闭");
    }
}

// ConcreteCommand: 具体命令类,用于打开灯
class TurnOnLightCommand implements Command {
    private Light light;

    public TurnOnLightCommand(Light light) {
        this.light = light;
    }

    @Override
    public void execute() {
        light.turnOn();
    }
}

// ConcreteCommand: 具体命令类,用于关闭灯
class TurnOffLightCommand implements Command {
    private Light light;

    public TurnOffLightCommand(Light light) {
        this.light = light;
    }

    @Override
    public void execute() {
        light.turnOff();
    }
}

// Invoker: 调用者,持有命令并触发执行
class RemoteControl {
    private Command command;

    public void setCommand(Command command) {
        this.command = command;
    }

    public void pressButton() {
        command.execute();
    }
}

// Client: 客户端,负责组装命令、接收者和调用者
public class CommandPatternDemo {
    public static void main(String[] args) {
        Light livingRoomLight = new Light();

        // 创建命令
        Command turnOn = new TurnOnLightCommand(livingRoomLight);
        Command turnOff = new TurnOffLightCommand(livingRoomLight);

        // 配置调用者
        RemoteControl remote = new RemoteControl();

        // 打开灯
        remote.setCommand(turnOn);
        remote.pressButton();

        // 关闭灯
        remote.setCommand(turnOff);
        remote.pressButton();
    }
}

输出:

灯已打开
灯已关闭

5. UML 演示优化

在上述代码的基础上,标注具体关系:
1. CommandConcreteCommand:实现关系。
2. InvokerCommand:组合关系。
3. ConcreteCommandReceiver:组合关系。


6. Android 中的实际应用

  1. 事件处理:

    • 在 Android 中,通过 View.OnClickListener 实现按钮点击事件的回调,本质上就是一种命令模式的体现。
  2. 任务调度:

    • 使用 Handler 来封装消息和任务,发送到主线程进行处理。
  3. 动画系统:

    • 使用 ObjectAnimator 调用一系列命令(如 startpause 等)来控制动画效果。
  4. 全局操作管理:

    • 实现撤销/重做功能(如编辑器或画板应用),可以通过保存命令队列实现。

7. 记忆与总结

记忆口诀:
请求封装变对象,调用执行两分离;命令扩展灵活化,解耦复杂又便捷。

通过引入命令模式,可以清晰地分离命令、接收者和调用者,使系统具有良好的扩展性和可维护性。

当前文章价值2.76元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)

你可能感兴趣的文章

来源:每日教程每日一例,深入学习实用技术教程,关注公众号TeachCourse
转载请注明出处: https://teachcourse.cn/3718.html ,谢谢支持!

资源分享

Python框架JWT实现登录token生成和接口校验 Python框架JWT实现登录token
Android手机如何快速接入周围无线网络 Wifi密码快速破解 Wifi工具 Android手机如何快速接入周围无
重置路由器电脑网络显示黄色叹号怎么办? 重置路由器电脑网络显示黄色叹号
Python实现中英文混合提取文章关键字 Python实现中英文混合提取文章关

评论已关闭!