命令模式
目录命令模式是一个高内聚的模式,其定义为:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请 求排队或者记录请求日志,可以提供命令的撤销和恢复功能。
命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。
角色组成:抽象命令角色,具体命令角色,调用者角色,抽象接受者角色,具体接收者角色,客户端。
命令模式与策略模式的差异:
命令模式比策略模式多了一个接收者角色。
命令模式主要针对一串操作,而策略模式针对的是单个操作。可以理解命令模式是策略模式的多层级升级版本。
例子
- 抽象命令类
package org.kouhao.design.patterns.命令模式;
/**
* @author admin
*/
public abstract class AbstractCommand {
IReceiver receiver;
public AbstractCommand(IReceiver receiver) {
this.receiver = receiver;
}
abstract void execute();
}
- 接收者接口
package org.kouhao.design.patterns.命令模式;
/**
* 接受者角色
*
* @author admin
*/
public interface IReceiver {
void action();
}
- 具体命令类1
package org.kouhao.design.patterns.命令模式;
/**
* 增加需求命令
*
* @author admin
*/
public class AddRequirementCommand extends AbstractCommand {
public AddRequirementCommand(IReceiver receiver) {
super(receiver);
}
@Override
void execute() {
this.receiver.action();
}
}
- 具体命令类2
package org.kouhao.design.patterns.命令模式;
/**
* 删除页面命令
*
* @author admin
*/
public class DeletePageCommand extends AbstractCommand {
private IReceiver receiver;
public DeletePageCommand(IReceiver receiver) {
super(receiver);
}
@Override
public void execute() {
receiver.action();
}
}
- 接收者实现类1
package org.kouhao.design.patterns.命令模式;
/**
* @author admin
*/
public class AddRequirementReceiver implements IReceiver {
@Override
public void action() {
System.out.println("AddRequirementReceiver is doing.");
}
}
- 接收者实现类2
package org.kouhao.design.patterns.命令模式;
/**
* @author admin
*/
public class DeletePageReceiver implements IReceiver{
@Override
public void action() {
System.out.println("DeletePageReceiver is doing.");
}
}
- 调用者类
package org.kouhao.design.patterns.命令模式;
/**
* @author admin
*/
public class Invoker {
private AbstractCommand command;
public void setCommand(AbstractCommand command) {
this.command = command;
}
public void action() {
this.command.execute();
}
}
- 客户端
package org.kouhao.design.patterns.命令模式;
/**
* @author admin
*/
public class Client {
public static void main(String[] args) {
//首先声明调用者Invoker
Invoker invoker = new Invoker();
//定义接收者
IReceiver receiver = new AddRequirementReceiver();
//定义一个发送给接收者的命令
AbstractCommand command = new AddRequirementCommand(receiver);
//把命令交给调用者去执行
invoker.setCommand(command);
invoker.action();
}
}
- 输出
标签:void,模式,命令,IReceiver,receiver,设计模式,public From: https://www.cnblogs.com/kouhao/p/17579619.htmlAddRequirementReceiver is doing.