java设计模式学习(1)命令模式

    xiaoxiao2021-03-25  112

    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.使用命令模式可以对请求者的”请求”进行排队. 每个请求都各自对应一个具体命令,因此可以按照一定的顺序执行这些命令

    转载请注明原文地址: https://ju.6miu.com/read-15227.html

    最新回复(0)