Command Pattern
餐厅中的命令模式:
客人给服务员下菜单,服务员记录下来,给厨师,让厨师做出美丽的菜肴!
这其中,客户是跟厨师见不着的,对于程序来说即降低了耦合度。
我们再以遥控器为例,说一下命令模式
小红按下了手中的遥控器的开按钮,遥控器给电视发送开的命令,电视接收到命令后执行开的动作,电视被打开。小红看完了电视,按下关的按钮,同样,遥控器控制电视关的操作,这期间,小红是不用接触到电视机的。
下面用程序实现此命令模式
package com.pattern.command; /** * 遥控器 */ public class Remoter { /** * 遥控器按钮按下,要执行一个命令 */ public void buttonPress(Command cmd){ cmd.execute(); } }
package com.pattern.command; /** * 命令接口,每一个命令都有一个execute方法 */ public interface Command { public void execute(); }
package com.pattern.command; /** * 打开电视命令,实现了命令接口,提供有执行命令的方法 */ public class OpenTvCommand implements Command { //命令作用的对象 private Tv tv; //执行电视打开之前,需要有一个电视 public OpenTvCommand(Tv tv){ this.tv=tv; } //让电视执行打开方法 @Override public void execute() { tv.open(); } }
package com.pattern.command; /** * 电视,具有打开和关闭的方法 * 遥控器调用不同的命令来操作电视具有的方法 */ public class Tv { public void open(){ System.out.println("TV open..."); } public void close(){ System.out.println("TV close..."); } }
package com.pattern.command; /** * 关闭电视命令 */ public class CloseTvCommand implements Command { private Tv tv; public CloseTvCommand(Tv tv){ this.tv=tv; } @Override public void execute() { tv.close(); } }
package com.pattern.command; public class Test { public static void main(String[] args) { Tv tv=new Tv();//买了一个电视 Remoter remoter=new Remoter();//电视配有一个遥控器 OpenTvCommand openCommand=new OpenTvCommand(tv);//给这个电视配置了打开命令 //遥控器按下打开命令,电视被打开 remoter.buttonPress(openCommand);//TV open... CloseTvCommand closeCommand=new CloseTvCommand(tv); remoter.buttonPress(closeCommand);//TV close... } }
今天我买了一个超级遥控器,把所有的命令装进去,我只需要按相应的按钮就可以了
SuperRemoter
package com.pattern.command1; import java.util.ArrayList; import java.util.List; public class SuperRemoter { private List<Command> cmds=new ArrayList<Command>(); public void add(Command... args){ for (Command command : args) { cmds.add(command); } } public void buttonPress(int index){ cmds.get(index-1).execute(); } }
package com.pattern.command1; public class Test { public static void main(String[] args) { Tv tv=new Tv();//买了一个电视 Remoter remoter=new Remoter();//电视配有一个遥控器 OpenTvCommand openCommand=new OpenTvCommand(tv);//给这个电视配置了打开命令 //遥控器按下打开命令,电视被打开 remoter.buttonPress(openCommand);//TV open... CloseTvCommand closeCommand=new CloseTvCommand(tv); remoter.buttonPress(closeCommand);//TV close... //***************今天我买了一个超级遥控器 SuperRemoter sr=new SuperRemoter(); sr.add(openCommand,closeCommand);//把电视的所有命令都装进去了,按下第几个键就可以了 sr.buttonPress(1);//执行第一个命令 sr.buttonPress(2);//执行第二个命令 } }
过几天,我又有新想法了,能不能让我的超级遥控器,按下某一个按钮,同时帮我打开电视和电灯呢!!
这里要使用宏命令了,什么是宏命令呢?就是一个操作可以完成多个命令!
package com.pattern.command1; public class Light { public void open(){ System.out.println("Light open..."); } public void close(){ System.out.println("Light close..."); } }
package com.pattern.command1; /** * 打开电灯命令,实现了命令接口,提供有执行命令的方法 */ public class OpenLightCommand implements Command { //命令作用的对象 private Light light; //执行电灯打开之前,需要有一个电灯 public OpenLightCommand(Light light){ this.light=light; } //让电灯执行打开方法 @Override public void execute() { light.open(); } }
package com.pattern.command1; public class MarcoCommand implements Command{ private Command[] cmds; public MarcoCommand(Command... cmds){ this.cmds=cmds; } @Override public void execute() { for (Command command : cmds) { command.execute(); } } }
package com.pattern.command1; public class Test { public static void main(String[] args) { Tv tv=new Tv();//买了一个电视 Remoter remoter=new Remoter();//电视配有一个遥控器 OpenTvCommand openCommand=new OpenTvCommand(tv);//给这个电视配置了打开命令 //遥控器按下打开命令,电视被打开 remoter.buttonPress(openCommand);//TV open... CloseTvCommand closeCommand=new CloseTvCommand(tv); remoter.buttonPress(closeCommand);//TV close... //***************今天我买了一个超级遥控器 SuperRemoter sr=new SuperRemoter(); sr.add(openCommand,closeCommand);//把电视的所有命令都装进去了,按下第几个键就可以了 sr.buttonPress(1);//执行第一个命令 sr.buttonPress(2);//执行第二个命令 //******************我一到家,我就按下一个按钮,就打开我的电视和电灯了!!! Light light=new Light(); OpenLightCommand openLightCommand=new OpenLightCommand(light); MarcoCommand mc=new MarcoCommand(openCommand,openLightCommand); sr.add(mc); sr.buttonPress(3);//TV open... Light open... } }
相关推荐
命令模式(Command Pattern)是一种行为设计模式,它将请求封装为一个对象,使得你可以使用不同的请求、队列请求,或者支持可撤销的操作。在Java中实现命令模式,我们可以利用面向对象编程的特性来构建系统,使得...
包括策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、访问者模式(Visitor)、责任链模式(Chain of Responsibility)、命令模式(Command)、备忘录模式...
12、命令模式COMMAND PATTERN 13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、访问者模式VISITOR PATTERN ...
文档中还提到了其他一些行为型设计模式,如命令模式(Command Pattern)、解释器模式(Interpreter Pattern)、迭代器模式(Iterator Pattern)、中介者模式(Mediator Pattern)、备忘录模式(Memento Pattern)、...
15. 命令模式(Command Pattern):将一个请求封装为一个对象,从而可以使用不同的请求、队列或者日志请求,也可以支持可撤销的操作。Java的`java.lang.Runnable`接口就是命令模式的体现。 这些设计模式都是Java...
13. **命令模式(Command Pattern)**:将请求封装为一个对象,使得可以使用不同的请求、队列请求、记录请求或者支持可撤销的操作。 14. **责任链模式(Chain of Responsibility Pattern)**:避免对象之间的耦合,...
命令模式-Command Pattern 请求发送者与接收者解耦——命令模式(一) 请求发送者与接收者解耦——命令模式(二) 请求发送者与接收者解耦——命令模式(三) 请求发送者与接收者解耦——命令模式(四) 请求发送者...
13. **命令模式(Command)**:将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。 14. **责任链模式(Chain of Responsibility)**:避免将处理...
命令模式(Command Pattern) 解释器模式(Interpreter Pattern) 迭代器模式(Iterator Pattern) 中介者模式(Mediator Pattern) 备忘录模式(Memento Pattern) 观察者模式(Observer Pattern) 状态模式...
行为型模式关注对象之间的通信和责任分配,如命令(Command)、解释器(Interpreter)、迭代器(Iterator)、中介者(Mediator)、备忘录(Memento)、观察者(Observer)、状态(State)、策略(Strategy)、模板...
命令模式(Command Pattern)是一种行为设计模式,它允许将请求封装为一个对象,从而使不同的请求可以使用不同的参数进行参数化,队列或日志请求,以及支持可撤销的操作。在 Java 中,命令模式的实现通常涉及一个...
**命令模式(Command Pattern)详解** 命令模式是一种行为设计模式,它将请求封装为一个对象,使得你可以使用不同的请求、队列或者日志请求,也可以支持可撤销的操作。在这个场景中,我们关注的是如何利用命令模式...
命令模式(Command Pattern) 解释器模式(Interpreter Pattern) 迭代器模式(Iterator Pattern) 中介者模式(Mediator Pattern) 备忘录模式(Memento Pattern) 观察者模式(Observer Pattern) 状态模式(State...
命令模式(Command Pattern)是一种将请求封装为一个对象,以便使用不同的请求来参数化客户端、队列或日志请求,以及支持可撤销的操作的行为设计模式。在命令模式中,发送者和接收者之间的耦合被解除,发送请求的...
在Java中实现命令模式,我们可以按照以下步骤进行: 1. **定义接口**: 命令模式的核心是定义一个命令接口,它声明了执行命令的方法。例如,我们可以创建一个名为`Command`的接口,其中包含一个`execute()`方法。...
此外,可能还使用了命令模式(Command Pattern)来封装旋转操作,使其可逆,以满足魔方游戏的要求。 关于中文注释,这为初学者理解代码提供了极大的便利。良好的注释可以帮助读者快速掌握代码结构和功能,尤其对于...
在`CommandPattern.zip`文件中,可能包含了这个模式的示例代码,你可以进一步查看和学习这些代码,以便更好地理解和应用命令模式。记住,虽然这是一个简单的实现,但命令模式的威力在于其能够适应复杂的需求,例如在...
命令模式 (Command Pattern) 命令模式是一种行为型模式,将一个请求封装成一个对象,从而使你能够用不同的请求来参数化对象,对请求进行排队或记录日志,以及支持可撤销的操作。命令模式可以将请求的发送者与执行...
命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。 ...
10. **设计模式**:在设计计算器时,可能会应用到命令模式(Command Pattern),将每种计算操作封装为一个命令对象,这样可以方便地添加新的计算功能。 综上所述,构建Java科学计算器涉及到了面向对象编程、图形...