命令模式
来源:互联网 发布:雷克萨斯rx200t 知乎 编辑:程序博客网 时间:2024/06/03 20:09
1类图
2定义
2.1 将一个请求封装成一个对象,从而让用户使用不同的请求吧=把客户端参数化;对请求排队或者纪录请求日志,已经支持可撤销的操作。
3应用场景
3.1 需要抽象出待支持的动作,然后以参数的形式提供出来-类似于过程设计中的回调机制,而命令模式正是回调机制的一个面向对象的代替品。
3.2 在不同时刻指定,排序和执行请求。一个命令对象可以有与初始请求无关的生存期。
3.3 需要支持取消操作。
3.4 支持修改日志功能,这样当系统崩溃时,这些修改可以被重新做一遍。
3.5 需要支持事务操作。
通用模式:
4接收者类
public class Receiver { public void action(){ System.out.println("执行具体操作"); }}
5抽象命令接口
public interface Command { void execute();}
6具体命令类
public class ConcreteCommand implements Command { private Receiver receiver; public ConcreteCommand(Receiver receiver) { this.receiver = receiver; } @Override public void execute() { receiver.action(); }}
7请求者类
public class Tnvoker { private Command command; public Tnvoker(Command command){ this.command = command; } public void action(){ command.execute(); }}
8客户类
public class Client { public static void main(String[] args) { Receiver receiver = new Receiver(); Command command = new ConcreteCommand(receiver); Tnvoker tnvoker = new Tnvoker(command); tnvoker.action(); }}
简单实现:
9接受者角色
public class TetrisMachine { public void toLeft(){ System.out.println("向左"); } public void toRight(){ System.out.println("向右"); } public void fastToBottom(){ System.out.println("快速落下"); } public void transform(){ System.out.println("改变形状"); }}
10命令者抽象
public interface Command { void execute();}
11具体命令者 向左
private TetrisMachine machine; public LeftCommand(TetrisMachine machine){ this.machine = machine; } @Override public void execute() { machine.toLeft(); }}
12具体命令者 向右
public class RightCommand implements Command {private TetrisMachine machine; public RightCommand(TetrisMachine machine){ this.machine = machine; } @Override public void execute() { machine.toRight(); }}
13请求者
public class Buttons { private LeftCommand leftCommand; private RightCommand rightCommand; public void toLeft() { leftCommand.execute(); } public void setLeftCommand(LeftCommand leftCommand) { this.leftCommand = leftCommand; } public void toRight() { rightCommand.execute();; } public void setRightCommand(RightCommand rightCommand) { this.rightCommand = rightCommand; }}
14客户类
14.1标准模式
public class Player { public static void main(String[] args) { TetrisMachine machine = new TetrisMachine(); LeftCommand leftCommand = new LeftCommand(machine); RightCommand rightCommand = new RightCommand(machine); Buttons button = new Buttons(); button.setLeftCommand(leftCommand); button.setRightCommand(rightCommand); button.toLeft(); button.toRight(); }}
14.2简化模式
public class Player { public static void main(String[] args) { TetrisMachine machine = new TetrisMachine(); machine.toLeft(); machine.toRight(); }}
阅读全文
0 0
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 初赛日志
- Docker原理
- 循环链表
- linux中查看nginx、apache、php、mysql配置文件路径
- 在64-bit 驱动中支持32-bit I/O 操作
- 命令模式
- 证券交易中各类词汇的解释
- 初识SDR
- Java学习之路——数组排序法(冒泡、直选、插入、反转)
- 利用reduce端的GroupingComparator来实现将一组bean看成相同的key
- codevs 1961 躲避大龙 bfs
- JADE学习笔记2 :Agent的创建和运行
- 双向链表基本操作
- servlet