敦煌网站外引流怎么做,网站建设与维护设计报告,要做好网络营销首先要,西安企业网站开发哪家好文章目录 一、什么是命令模式二、命令模式结构三、命令模式实现步骤四、命令模式应用场景 一、什么是命令模式
它允许将请求封装为对象#xff0c;一个请求对应于一个命令#xff0c;将发出命令的责任和执行命令的责任分割开。每一个命令都是一个操作#xff1a;请求的一方… 文章目录 一、什么是命令模式二、命令模式结构三、命令模式实现步骤四、命令模式应用场景 一、什么是命令模式
它允许将请求封装为对象一个请求对应于一个命令将发出命令的责任和执行命令的责任分割开。每一个命令都是一个操作请求的一方发出请求要求执行一个操作接收的一方收到请求并执行相应的操作。命令模式允许请求的一方和接收的一方独立开来使得请求的一方不必知道接收请求的一方的接口更不必知道请求如何被接收、操作是否被执行、何时被执行以及是怎么被执行的。命令模式使得请求可以排队、记录、日志、存储和重放。
命令模式的主要优点包括
降低系统的耦合度由于请求者与接收者之间不存在直接引用因此请求者与接收者之间实现完全解耦相同的请求者可以对应不同的接收者同样相同的接收者也可以供不同的请求者使用两者之间具有良好的独立性。新的命令可以很容易地添加到系统中因为增加一个新的命令不会影响其他类因此增加新的命令类很容易无须修改原有系统类库的代码甚至可以在不重新编译原有系统类库的情况下运行即系统扩展性好。可以很容易地实现命令的撤销与恢复只要把命令对象存储起来在需要时调用执行即可实现命令的撤销与恢复当然这里的撤销与恢复并非撤销和重做命令所产生的结果而是撤销与重放命令本身。在需要实现事务时命令模式也有其独特的优点当系统需要支持事务的时候可以通过把命令对象放到一个事务队列中等待系统处理事务的命令序列。
命令模式的主要缺点包括
可能导致某些系统有过多的具体命令类因为针对每一个对请求接收者的调用操作都需要设计一个具体命令类因此在某些系统中可能需要提供大量的具体命令类这将影响命令模式的使用。
总的来说命令模式是一种非常有用的设计模式特别适用于需要将请求封装为对象、支持可撤销操作、或需要事务管理的场景。
二、命令模式结构 命令模式的主要参与者包括
命令Command接口声明执行操作的接口。具体命令ConcreteCommand类实现命令接口将接收者的一个动作绑定其中。调用接收者相应的操作以实现执行效果。请求者Invoker要求命令对象执行请求通常会持有命令对象可以持有很多的命令对象。这是真正发号施令者。接收者Receiver执行命令的对象。任何类都可能成为一个接收者只要它能够实现命令要求实现的相应功能。客户端Client创建具体的命令对象并且设置命令对象的接收者。在不是直接调用接收者的情况下将命令对象传递给请求者来执行请求。
三、命令模式实现步骤
命令模式的实现步骤通常包括以下几个部分
定义命令接口 首先你需要定义一个命令接口这个接口通常声明了一个执行方法如execute()。例如在Java中你可以这样定义
public interface Command { void execute();
}创建具体命令类 然后你需要创建具体的命令类这些类实现了命令接口并包含了接收者对象的引用。这些命令类将调用接收者的方法来完成实际的操作。
public class ConcreteCommand implements Command { private Receiver receiver; public ConcreteCommand(Receiver receiver) { this.receiver receiver; } Override public void execute() { receiver.action(); // 调用接收者的方法 }
}创建接收者 接收者类通常包含实际要执行的操作。任何类都可以作为接收者只要它能够执行命令所请求的操作。
public class Receiver { public void action() { // 执行操作 }
}创建请求者 请求者Invoker是发出命令请求的对象。它通常持有命令对象的引用并可以通过调用命令对象的execute()方法来执行命令。
public class Invoker { private Command command; public Invoker(Command command) { this.command command; } public void call() { command.execute(); // 调用命令的执行方法 }
}在客户端中组装命令和接收者 客户端负责创建具体的命令对象并将接收者对象传递给命令对象。然后客户端将命令对象传递给请求者请求者通过调用命令对象的execute()方法来执行命令。
public class Client { public static void main(String[] args) { Receiver receiver new Receiver(); Command command new ConcreteCommand(receiver); Invoker invoker new Invoker(command); invoker.call(); // 调用请求者的call方法间接执行命令 }
}这就是命令模式的基本实现步骤。通过这种方式你可以将请求者和接收者解耦使得请求者不知道也不关心接收者的具体实现细节。同时由于请求被封装为了命令对象你可以很方便地对其进行存储、传递和组合等操作。
四、命令模式应用场景