命令模式
来源:互联网 发布:安卓播放器源码 编辑:程序博客网 时间:2024/05/29 17:17
一、什么是命令模式
运用了命令模式的代码例子:
加入了Invoker的命令设计模式
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
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- Android 实时通讯
- .net 微信开发前的必备基础知识(一)
- $.ajax()请求
- Foundation框架---“集合类”
- Python基础--目录
- 命令模式
- android不通过编译修改build.prop方法
- androd 事件分发机制的初步理解
- 记忆化搜索dp(uva10739)
- 非法字符: \65279 的解决办法
- TF-IDF与余弦相似性的应用(三):自动摘要
- 12 shell文件的操作
- 加密勒索软件:给钱也不一定能取回资料
- 完美的 App测试方案