命令模式
来源:互联网 发布:查看udp端口是否打开 编辑:程序博客网 时间:2024/06/05 07:22
1.定义
将一个请求封装成一个对象,从而让用户使用不同的请求把客户端参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。
2.实现(俄罗斯方块)
/** * 俄罗斯方块操作的真正逻辑代码(左移,右移,快速落下,改变形状) */public class RealOperation { public void toLeft(){ System.out.println("toLeft"); } public void toRight(){ System.out.println("toRight"); } public void fastToBottom(){ System.out.println("fastToBottom"); } public void transForm(){ System.out.println("transForm"); } }/** * 命令的抽象,便于实现四个具体的命令 */public interface Command { public void execute();}/** * 左移的具体实现 */public class LeftCommand implements Command { private RealOperation operation; public LeftCommand(RealOperation operation) { this.operation = operation; } @Override public void execute() { operation.toLeft(); }}/** * 右移的具体实现 */public class RightCommand implements Command { private RealOperation operation; public RightCommand(RealOperation operation) { this.operation = operation; } @Override public void execute() { operation.toRight(); }}/** * 快速落下的具体实现 */public class FallCommand implements Command { private RealOperation operation; public FallCommand(RealOperation operation) { this.operation = operation; } @Override public void execute() { operation.fastToBottom(); }}/** * 改变形状的具体实现 */public class TransFormCommand implements Command { private RealOperation operation; public TransFormCommand(RealOperation operation) { this.operation = operation; } @Override public void execute() { operation.transForm(); }}/** * 四个命令的管理者 */public class Commander { private LeftCommand leftCommand; private RightCommand rightCommand; private FallCommand fallCommand; private TransFormCommand transFormCommand; public LeftCommand getLeftCommand() { return leftCommand; } public void setLeftCommand(LeftCommand leftCommand) { this.leftCommand = leftCommand; } public RightCommand getRightCommand() { return rightCommand; } public void setRightCommand(RightCommand rightCommand) { this.rightCommand = rightCommand; } public FallCommand getFallCommand() { return fallCommand; } public void setFallCommand(FallCommand fallCommand) { this.fallCommand = fallCommand; } public TransFormCommand getTransFormCommand() { return transFormCommand; } public void setTransFormCommand(TransFormCommand transFormCommand) { this.transFormCommand = transFormCommand; } //调用具体实现方法实现命令 public void toLeft(){ leftCommand.execute(); } public void toRight(){ rightCommand.execute(); } public void fall(){ fallCommand.execute(); } public void transForm(){ transFormCommand.execute(); }} public static void main(String[] args) { RealOperation realOperation = new RealOperation(); //构造四种命令 LeftCommand leftCommand = new LeftCommand(realOperation); RightCommand rightCommand = new RightCommand(realOperation); FallCommand fallCommand = new FallCommand(realOperation); TransFormCommand transFormCommand = new TransFormCommand(realOperation); Commander commander = new Commander(); commander.setLeftCommand(leftCommand); commander.setRightCommand(rightCommand); commander.setFallCommand(fallCommand); commander.setTransFormCommand(transFormCommand); commander.toLeft(); commander.toRight(); commander.fall(); commander.transForm(); //如果写realOperation.toLeft();是不是更容易接受? //问题的是如果我需要一个命令是由已知的命令的组合怎么办? //如果是命令模式,只需要新建一个Command然后自己实现就行,只需要拓展不需要修改(RealOperation) //如果不采用命令模式是需要修改RealOperation类的 }
3.总结
1.优点
命令模式的封装性很好,更弱的耦合性,更灵活的控制性以及更好的扩展性。
2.缺点
类的膨胀,大量衍生类的创建。
0 0
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 颜色值、长度值
- 1——进程控制
- Java学习日记5:jsp
- (51nod)1082
- matlab2010a在mbuild时找不到vs2010的解决办法
- 命令模式
- Java基础学习记录之Hibernate单表的CRUD操作
- JavaScript冒泡捕获事件流详解
- 正则表达式30分钟入门教程
- JAVA多线程
- C++笔试题
- Android中TextView与Button的区别
- 第十四章:Java_网络编程
- java socket文件传输