定义:
命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
目的:
将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。
主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。
何时使用:
在某些场合,比如要对行为进行”记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将”行为请求者”与”行为实现者”解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。
如何解决:
通过调用者调用接受者执行命令,顺序:调用者→命令→接受者。
关键代码:定义三个角色:1、received 真正的命令执行对象 2、Command 3、invoker 使用命令对象的入口
主要涉及到以下几个核心角色:
命令(Command):
定义了执行操作的接口,通常包含一个 execute 方法,用于调用具体的操作。
具体命令(ConcreteCommand):
实现了命令接口,负责执行具体的操作。它通常包含了对接收者的引用,通过调用接收者的方法来完成请求的处理。
接收者(Receiver):
知道如何执行与请求服务器托管网相关的操作,实际执行命令的对象。
调用者/请求者(Invoker):
发送命令的对象,它包含了一个命令对象并能触发命令的执行。调用者并不直接处理请求,而是通过将请求传递给命令对象来实现。
客户端(Client):
创建具体命令对象并设置其接收者,将命令对象交给调用者执行。
// 定义士兵类
class Soldier {
public void attack() {
System.out.println("士兵发起进攻!");
}
}
// 定义长官类
class Commander {
private Soldier soldier;
public Commander(Soldier soldier) {
this.soldier = soldier;
}
// 定义命令接口
interface Command {
void execute();
}
// 定义具体命令,即长官下达的命令
class AttackCommand implements Command {
@Override
public void execute() {
soldier.attack();
}
}
// 设置命令
public void setCommand(Command command) {
this.command = command;
}
// 发布命令
public void issueCommand() {
command.execute();
}
private Command command;
}
// 客户端
public class CommandPatternExample {
public static void main(String[] args) {
// 创建士兵
Soldier soldier = new Soldier();
// 创建长官,并指定士兵
Commander commander = new Commander(soldier);
// 创建具体命令对象,并设置给长官
Commander.Command command = commander.new AttackCommand();
commander.setCommand(command);
// 长官发布命令
commander.issueCommand();
}
}
代码运行截图
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
工作无需燃烧自己 在前面的文章中,笔者已经介绍了工作中没有努力一说,而是要做到四步走:了解情况,做出决策,抓住核心,运用手段。我相信同学们仍然会觉得笔者的说法过于绝对。那我凭借着这四步走,做很多很多业绩我不就能往上爬了,不也是努力工作嘛。我还是在工作中努力…