命令模式

2020-08-13  本文已影响0人  潜心之力

一、模式简介

定义:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。
场景:当系统需要将请求调用者与请求接收者解耦时,命令模式使得调用者和接收者不直接交互。当系统需要随机请求命令或经常增加或删除命令时,命令模式比较方便实现这些功能。当系统需要执行一组操作时,命令模式可以定义宏命令来实现该功能。当系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作时,可以将命令对象存储起来,采用备忘录模式来实现。

二、模式实现

public interface AbstractCommand { -> 抽象命令
    void command();
}

public class EnterConcreteCommand implements AbstractCommand { -> 具体命令
    @Override
    public void command() {
        TelevisionReceiver receiver = new TelevisionReceiver();
        receiver.enter();
    }
}

public class BackConcreteCommand implements AbstractCommand { -> 具体命令
    @Override
    public void command() {
        TelevisionReceiver receiver = new TelevisionReceiver();
        receiver.back();
    }
}

public class TelevisionReceiver { -> 接收者
    public void enter(){
        System.out.println("电视机收到enter的命令并执行作出回应");
    }

    public void back(){
        System.out.println("电视机收到back的命令并执行作出回应");
    }
}

public class RemoteControlInvoker { -> 调用者
    public void remote(AbstractCommand command){
        command.command();
    }
}

以用户创建命令通过遥控器发送给电视机,电视机解析命令后作出响应为例子,用户的想法是抽象命令,遥控器上的按键是具体命令,遥控器是调用者,电视机是接收者。

RemoteControlInvoker invoker = new RemoteControlInvoker();
AbstractCommand enter = new EnterConcreteCommand();
invoker.remote(enter);
AbstractCommand back = new BackConcreteCommand();
invoker.remote(back);
上一篇 下一篇

猜你喜欢

热点阅读