博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
命令模式
阅读量:4181 次
发布时间:2019-05-26

本文共 1991 字,大约阅读时间需要 6 分钟。

把一个请求或操作封装在命令对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或记录日志,可以提供命令的撤销和恢复功能。

类图及定义

在这里插入图片描述

命令角色(command):声明执行操作的接口,由java接口或抽象类实现。
具体命令角色(concrete command):将一个接收者对象绑定一个动作(参数),调用接收者相应的操作(调用方法),以实现命令角色声明的执行操作的接口。
客户角色(client):创建一个具体命令对象(并可以设定它的接收者)。
请求者角色(Invoker):调用命令对象执行这个请求。
接收者角色(Receiver):知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者。

命令模式的优点
  1. 命令模式将调用操作的请求对象与知道如何实现该操作的接收对象解耦。
  2. 具体命令角色可以被不同的请求者角色重用。
  3. 可以将多个命装配成一个复合命令。
  4. 增加新的具体命令角色很容易,因为这无需改变已有的类。
命令模式的适用环境
  1. 需要抽象出待执行的动作,然后以参数的形式提供出来。
  2. 在不同的时刻指定、排列和执行请求。一个命令对象可以有与初始请求无关的生存期。
  3. 需要支持取消操作。
  4. 支持修改日志功能,这样系统崩溃时,这些修改可以被重做一遍。
  5. 需要支持事务性操作。
命令模式的应用场景
  1. 多级undo操作。如果系统需要实现多级回退操作
  2. 原子事务的回退操作。
  3. 状态条。
//命令角色public interface Command {
void execute();}//具体命令角色(打开电视)public class CommandOn implements Command {
private TV myTv; public CommandOn(TV myTv) {
this.myTv = myTv; } @Override public void execute() {
myTv.turnOn(); }}//具体命令角色(切换频道)public class CommandChannel implements Command {
private TV myTv; public CommandChannel(TV myTv) {
this.myTv = myTv; } @Override public void execute() {
myTv.commandChannel(); }}//具体命令角色(关闭电视)public class CommandOff implements Command {
private TV myTv; public CommandOff(TV myTv) {
this.myTv = myTv; } @Override public void execute() {
myTv.turnOff(); }}//命令控制者public class Control {
private CommandChannel channel; private CommandOn commandOn; private CommandOff commandOff; public Control(CommandChannel channel, CommandOn commandOn, CommandOff commandOff) {
this.channel = channel; this.commandOn = commandOn; this.commandOff = commandOff; } public void turnOn() {
commandOn.execute(); } public void turnOff() {
commandOff.execute(); } public void commandChannel() {
channel.execute(); } }//命令接受者public class TV {
public int currentChannel = 0; public void turnOn() {
System.out.println("现在电视是打开的"); } public void turnOff() {
System.out.println("现在电视是关闭的"); } public void commandChannel() {
System.out.println("频道已切换" + currentChannel); }}

上一篇:

下一篇:

转载地址:http://ymrai.baihongyu.com/

你可能感兴趣的文章
60个优秀的免费3D模型下载网站
查看>>
Cardboard虚拟现实开发初步(三)
查看>>
Android native和h5混合开发几种常见的hybrid通信方式
查看>>
Vista/Win7 UAC兼容程序开发指南
查看>>
IOS程序开发框架
查看>>
安装jdk的步骤
查看>>
简述JAVA运算符
查看>>
简易ATM源代码及运行结果
查看>>
简述Java中的简单循环
查看>>
用JAVA实现各种乘法表
查看>>
for双重循环实现图形
查看>>
Java类和对象基础
查看>>
简述Java继承和多态
查看>>
Java中Arrays工具类的用法
查看>>
简述JAVA抽象类和接口
查看>>
JAVA常用基础类
查看>>
简述Java异常处理
查看>>
简述Java集合框架
查看>>
jQuery+ajax实现省市区(县)下拉框三级联动
查看>>
Spring中的AOP 面向切面编程
查看>>