java设计模式学习 (1)命令模式
2017-03-09 20:05
519 查看
java设计模式学习 (1)命令模式
命令模式–在许多设计中,经常涉及到一个对象请求另一个对象调用其方法达到某种目的,如果请求者不希望或无法直接和被请求者打交道,即不希望或无法含有被请求者的引用,这时就可以使用命令模式。结构中包括4个角色:
接收者(Receiver):是一个类的实例,负责执行与请求相关的操作.
命令(Command)接口: 一个接口,规定用来封装“”请求“的若干个方法,比如execute(),undo();等
具体命令(ConcreteCommand):去实现命令接口.
请求者(Invoker):是一个包含Command接口变量的类的一个实例. 其中的Command接口变量可以存放任何具体命令的引用,负责调用具体命令,让具体命令执行那些封装了请求的方法。
模式 代码例子1:(目录的建立与撤销)
1 命令Command.java
public interface Command{
//执行方法
public void execute(String path_name);
//撤销方法
public void undo();
}
2.具体命令 DirCommand.java
import java.util.*;
public class DirCommand implements Command{
MakeDir makeDir;//含有接收者的引用
ArrayList pathList;
public DirCommand(MakeDir makeDir){
this.makeDir=makeDir;
pathList=new ArrayList();
}
public DirCommand(){}
public void execute(String path_name){
makeDir.createDir(path_name);
pathList.add(path_name);
}
public void undo(){
int n= pathList.size();
if(n>0){
String name =pathList.get(n-1);
makeDir.deleteDir(name);
pathList.remove(n-1);
}else{
System.out.println(“没有需要撤销的操作!”);
}
}
}
3.请求者Invoker.java
public class Invoker{
Command command;//存放具体命令的引用
public void setCommand(Command command){
this.command=command;
}
public void startExcuteCommand(String name){
command.execute(name);
}
public void undoCommand(){
command.undo();
}
}
4 接收者 Invoker.java
public class Invoker{
Command command;//存放具体命令的引用
public void setCommand(Command command){
this.command=command;
}
public void startExcuteCommand(String name){
command.execute(name);
}
public void undoCommand(){
command.undo();
}
}
5测试代码
public class Demo1{
public static void main(String []args){
MakeDir makedir=new MakeDir();
Command command =new DirCommand(makedir);
Invoker invoker =new Invoker();
invoker.setCommand(command);
invoker.startExcuteCommand(“F://Test1”);
invoker.startExcuteCommand(“F://Test2”);
invoker.startExcuteCommand(“F://Test3”);
invoker.undoCommand();
invoker.undoCommand();
}
}
命令模式的优点:
1. 在命令模式中, 请求者不直接与接收者交互, 即请求者不包含接收者的引用, 因此彻底消除了彼此之间的耦合.
命令模式满足”开-闭”原则. 如果增加新的具体命令和该命令的接收者, 不必修改调用者的代码, 调用者就可以使用新的命令对象; 反之, 如果增加新的调用者, 不必修改现有的具体命令和接收者, 新增加的调用者就可以使用自己已有的具体命令
3.由于请求者被封装到了具体命令中, 那么就可以将具体命令保存到持久化的媒介中, 在需要的时候, 重新执行这个具体命令. 因此使用命令模式可以记录日志.
4.使用命令模式可以对请求者的”请求”进行排队. 每个请求都各自对应一个具体命令,因此可以按照一定的顺序执行这些命令
相关文章推荐
- 设计模式学习笔记--命令模式command pattern(Java版)
- java设计模式之命令模式 学习笔记
- 学习笔记:java设计模式--命令模式
- JAVA设计模式学习——命令模式
- java设计模式学习(五):命令模式
- java 设计模式学习笔记十二 command命令设计模式
- Java设计模式(学习整理)---命令模式
- 学习笔记——JAVA设计模式<15>命令模式
- java 设计模式学习笔记十二 command命令设计模式
- Java设计模式知识学习-----命令模式
- 【笨鸟先飞】Java重新学习日记19--设计模式之命令模式
- Java-马士兵设计模式学习笔记-命令模式
- 学习笔记:Java设计模式-命令模式
- java学习笔记-设计模式19(命令模式)
- Java设计模式学习记录-命令模式
- JAVA与模式学习笔记之设计原则
- java 设计模式 学习笔记(一)
- 设计模式学习笔记---建造者模式(Java版)
- PureMVC学习系列-从源码深度剖析PureMVC(从PureMVC中看设计模式-Command命令模式) .
- java设计模式之命令模式