命令模式

来源:互联网 发布:安卓播放器源码 编辑:程序博客网 时间:2024/05/29 17:17
一、什么是命令模式

    Command模式也叫命令模式 ,是行为设计模式的一种。Command模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数。

二、命令模式的应用场景
    在面向对象的程序设计中,一个对象调用另一个对象,一般情况下的调用过程是:创建目标对象实例;设置调用参数;调用目标对象的方法。
    但在有些情况下有必要使用一个专门的类对这种调用过程加以封装,我们把这种专门的类称作command类。
    - 整个调用过程比较繁杂,或者存在多处这种调用。
    这时,使用Command类对该调用加以封装,便于功能的再利用。
    - 调用前后需要对调用参数进行某些处理。 - 调用前后需要进行某些额外处理,比如日志,缓存,记录历史操作等。

三、命令模式的角色和职责
Command
     Command抽象类。
ConcreteCommand
     Command的具体实现类。
Receiver
     需要被调用的目标对象。
Invorker

     通过Invorker执行Command对象。

没有运用命令模式的代码:

Peddler.javapackage com.ibeifemg.ex1; /*  * 小商贩  */ public class Peddler {      //卖苹果     public void sailApple() {         System.out.println("卖苹果");     }      //卖香蕉     public void sailBanana() {         System.out.println("卖香蕉");     }  }MainClass.javapackage com.ibeifemg.ex1; public class MainClass {     public static void main(String[] args) {         Peddler peddler = new Peddler();         peddler.sailApple();         peddler.sailBanana();     } }

运用了命令模式的代码例子:

Peddler.javapackage com.ibeifemg.ex2; /*  * 小商贩  */ public class Peddler {      //卖苹果     public void sailApple() {         System.out.println("卖苹果");     }      //卖香蕉     public void sailBanana() {         System.out.println("卖香蕉");     }  }Command.javapackage com.ibeifemg.ex2; public abstract class Command {     private Peddler peddler;       public Command(Peddler peddler) {         this.peddler = peddler;     }      public Peddler getPeddler() {         return peddler;     }      public void setPeddler(Peddler peddler) {         this.peddler = peddler;     }      public abstract void sail(); }BananaCommand.javapackage com.ibeifemg.ex2; public class BananaCommand extends Command{      public BananaCommand(Peddler peddler) {         super(peddler);     }      public void sail() {         this.getPeddler().sailBanana();     }  }AppleCommand.javapackage com.ibeifemg.ex2; public class AppleCommand extends Command {      public AppleCommand(Peddler peddler) {         super(peddler);     }      public void sail() {         this.getPeddler().sailApple();     }  }MainClass.javapackage com.ibeifemg.ex2; public class MainClass {     public static void main(String[] args) {         Peddler peddler = new Peddler(); //      peddler.sailApple(); //      peddler.sailBanana();          Command appleCommand = new AppleCommand(peddler);         Command bananaCommand = new BananaCommand(peddler);         appleCommand.sail();         bananaCommand.sail();     } }

加入了Invoker的命令设计模式

Peddler.javapackage com.ibeifemg.ex3; /*  * 小商贩  */ public class Peddler {      //卖苹果     public void sailApple() {         System.out.println("卖苹果");     }      //卖香蕉     public void sailBanana() {         System.out.println("卖香蕉");     }  }Command.javapackage com.ibeifemg.ex3; public abstract class Command {     private Peddler peddler;       public Command(Peddler peddler) {         this.peddler = peddler;     }      public Peddler getPeddler() {         return peddler;     }      public void setPeddler(Peddler peddler) {         this.peddler = peddler;     }      public abstract void sail(); }BananaCommand.javapackage com.ibeifemg.ex3; public class BananaCommand extends Command{      public BananaCommand(Peddler peddler) {         super(peddler);     }      public void sail() {         this.getPeddler().sailBanana();     }  }AppleCommand.javapackage com.ibeifemg.ex3; public class AppleCommand extends Command {      public AppleCommand(Peddler peddler) {         super(peddler);     }      public void sail() {         this.getPeddler().sailApple();     }  }Waiter.javapackage com.ibeifemg.ex3; public class Waiter {     private Command command;      public Command getCommand() {         return command;     }      public void setCommand(Command command) {         this.command = command;     }      public void sail() {         command.sail();     } }MainClass.javapackage com.ibeifemg.ex3; public class MainClass {     public static void main(String[] args) {         Peddler peddler = new Peddler(); //      peddler.sailApple(); //      peddler.sailBanana();          Command appleCommand = new AppleCommand(peddler);         Command bananaCommand = new BananaCommand(peddler); //      appleCommand.sail(); //      bananaCommand.sail();         Waiter waiter = new Waiter();         waiter.setCommand(appleCommand);         waiter.sail();         waiter.setCommand(bananaCommand);         waiter.sail();     } }


0 0