命令模式(Command Pattern)将一个请求封装为一个对象,这样用不同的请求对客户进行参数化。降低了系统耦合度,而且新的命令可以很容易添加到系统中去,但是要避免过多的具体命令。
一、需求举例:
客户经理(client)发送需求开发给软件工程师,工程师(Receiver)负责开发项目.
二、类图
三、代码实例
1.命令接受者:SoftEngineerReceiver
package com.lance.command;
public class SoftEngineerReceiver {
public void develop() {
System.out.println("SoftEngineer develop program.");
}
}
2.命令父类:Command
package com.lance.command;
public abstract class Command {
protected SoftEngineerReceiver softEngineerReceiver;
public Command(SoftEngineerReceiver softEngineerReceiver) {
this.softEngineerReceiver = softEngineerReceiver;
}
abstract public void exe();
}
3.命令实现类:CommandImpl
package com.lance.command;
public class CommandImpl extends Command {
public CommandImpl(SoftEngineerReceiver softEngineerReceiver) {
super(softEngineerReceiver);
}
@Override
public void exe() {
System.out.println("Command exe develop");
softEngineerReceiver.develop();
}
}
4.产品经理类:ProductManagerInvoker
package com.lance.command;
public class ProductManagerInvoker {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void invokeCmd() {
System.out.println("ProductManager invoke Cmd exe.");
command.exe();
}
}
5.主类:CommandPattern
package com.lance.command;
public class CommandPattern {
public static void main(String[] args) {
System.out.println("==========start==========");
SoftEngineerReceiver softEngineerReceiver = new SoftEngineerReceiver();
Command command = new CommandImpl(softEngineerReceiver);
ProductManagerInvoker productManagerInvoker = new ProductManagerInvoker();
productManagerInvoker.setCommand(command);
productManagerInvoker.invokeCmd();
System.out.println("==========end==========");
}
}
输出结果:
==========start==========
ProductManager invoke Cmd exe.
Command exe develop
SoftEngineer develop program.
==========end==========
网友评论