标签:operation 命令模式 with ddc 封装 撤销 模式 public extends
Encapsulate a request as an object,thereby letting you parameterize clients with
different requests,queue or log requests,and support undoable operations.
将一个请求封装为一个对象,从而允许你对客户端的不同请求,队列或日志请求参数化,并支持撤销操作。
public class Command {
/**
* 命令模式:
* Encapsulate a request as an object,thereby letting you parameterize clients with
* different requests,queue or log requests,and support undoable operations.
* 将一个请求封装为一个对象,从而允许你对客户端的不同请求,队列或日志请求参数化,并支持撤销操作。
*/
@Test
public void all() {
final AddCommand addCommand = AddCommand.builder().build();
final UpdateCommand updateCommand = UpdateCommand.builder().build();
final Invoker invoker = Invoker.builder().build();
invoker.setCommand(addCommand);
invoker.invoke();
invoker.setCommand(updateCommand);
invoker.invoke();
}
}
/**
* 1)有效的操作行为
*/
interface IOperate {
void find();
void add();
void update();
void delete();
}
/**
* 2)具体的行为实现者:UCD 组支持的操作
*/
@Slf4j
class UCD implements IOperate {
@Override
public void find() {
log.info("找到 UCD 组");
}
@Override
public void add() {
log.info("UCD 组增加一项需求");
}
@Override
public void update() {
log.info("UCD 组修改一项需求");
}
@Override
public void delete() {
log.info("UCD 组取消一项需求");
}
}
/**
* UI 组支持的操作
*/
@Slf4j
class UI implements IOperate {
@Override
public void find() {
log.info("找到 UI 组");
}
@Override
public void add() {
log.info("UI 组增加一项需求");
}
@Override
public void update() {
log.info("UI 组修改一项需求");
}
@Override
public void delete() {
log.info("UI 组取消一项需求");
}
}
/**
* Coder 组支持的操作
*/
@Slf4j
class Coder implements IOperate {
@Override
public void find() {
log.info("找到代码组");
}
@Override
public void add() {
log.info("代码组增加一项需求");
}
@Override
public void update() {
log.info("代码组修改一项需求");
}
@Override
public void delete() {
log.info("代码组删除一项需求");
}
}
/**
* 3)抽象命令类,指定了所有有效的操作
*/
abstract class ACommand {
protected final IOperate ucd = new UCD();
protected final IOperate ui = new UI();
protected final IOperate coder = new Coder();
abstract public void execute();
}
/**
* 4)具体命令类:新增一个功能
*/
@Builder
class AddCommand extends ACommand {
@Override
public void execute() {
ucd.find();
ucd.add();
ui.find();
ui.add();
coder.find();
coder.add();
}
}
/**
* 修改一个功能
*/
@Builder
class UpdateCommand extends ACommand {
@Override
public void execute() {
ui.find();
ui.update();
coder.find();
coder.update();
}
}
/**
* 5)命令执行者
*/
@Builder
class Invoker {
private ACommand command;
public void setCommand(ACommand command) {
this.command = command;
}
public void invoke() {
command.execute();
}
}
标签:operation 命令模式 with ddc 封装 撤销 模式 public extends
原文地址:https://www.cnblogs.com/zhuxudong/p/10165465.html