用命令模式实现这样一个需求:
有个按钮,将一盏电灯的开和关动作都绑定在这个按钮上。另外还有一个undo按钮,可撤消之前的一个动作。
package com.headfirst.chapter6;
public interface Command {
public void execute();
public void undo();
}
下面这个电灯类,对应上面的图也就是接收者
package com.headfirst.chapter6;
public class Light {
public void on(){
System.out.println("the light is on");
}
public void off(){
System.out.println("the light if off");
}
}
下面这个是具体的命令类,也就是开灯命令
package com.headfirst.chapter6;
public class LightOnCommand implements Command {
private Light light;//有一个接收者实例
public LightOnCommand(Light light) {
this.light = light;
}
public void execute() {
light.on();
}
public void undo(){
light.off();
}
}
package com.headfirst.chapter6;
public class LightOffCommand implements Command {
private Light light;//有一个接收者实例
public LightOffCommand(Light light){
this.light = light;
}
public void execute() {
light.off();
}
public void undo(){
light.on();
}
}
下面这个是invoker
package com.headfirst.chapter6;
public class SimpleRemoteControl {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void buttonWasPressed(){
command.execute();
}
public void undoButtonWasPressed(){
command.undo();
}
}
测试类
package com.headfirst.chapter6;
public class RemoteControlTest {
public static void main(String[] args) {
Light light = new Light();
LightOnCommand lightOnCommand = new LightOnCommand(light);
LightOffCommand lightOffCommand = new LightOffCommand(light);
SimpleRemoteControl simpleRemoteControl = new SimpleRemoteControl();
simpleRemoteControl.setCommand(lightOnCommand);
simpleRemoteControl.buttonWasPressed();
simpleRemoteControl.setCommand(lightOffCommand);
simpleRemoteControl.buttonWasPressed();
simpleRemoteControl.undoButtonWasPressed();//做一次undo,状态又回到之前
}
}
最后打印出:
the light is on
the light if off
the light is on
命令模式的定义:将“请求”封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。
上面的“队列或日志来参数化”的意思是有很多命令,以队列的方式先后执行。
日志是指将每个操作动作“命令化”,记录在日志中。
分享到:
相关推荐
- 命令模式:将请求封装为一个对象,以便使用不同的请求、队列请求或支持撤销操作。 - 解释器模式:为特定语言提供解析规则,如表达式求值。 - 迭代器模式:提供一种方法顺序访问聚合对象的元素,而又不暴露其...
《Headfirst设计模式》是一本深受开发者欢迎的设计模式学习书籍,尤其对于初学者而言,其独特的教学方式使得复杂的概念变得易于理解。这本书以其高清的中文版PDF格式提供,结合书中源码,为读者提供了深入实践的可能...
在Head First 设计模式这本书中,第六章详细介绍了如何在C++中实现命令模式。 命令模式的核心思想是将"做什么"与"谁去做"分离开来。命令对象持有接收者并调用其特定方法,而调用者只关心命令对象,而不关心具体的...
总结来说,Headfirst第六章的命令模式C++实现涵盖了设计模式中的核心概念:解耦、多态和对象的职责分离。通过这种方式,我们可以构建更加灵活、可扩展的系统。学习和应用命令模式能帮助我们编写出更易于维护和测试的...
行为型模式涉及对象间的交互和责任分配,包括模板方法模式(Template Method)、观察者模式(Observer)、策略模式(Strategy)、职责链模式(Chain of Responsibility)、命令模式(Command)、迭代器模式...
《Head First 设计模式》的英文版是一本面向初学者的设计模式入门书籍,它以幽默风趣的文风,深入浅出地介绍了软件设计中经常使用的设计模式。设计模式是一套被反复使用、多数人知晓、经过分类编目、代码设计经验的...
12. **命令模式**:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 13. **享元模式**:运用共享技术有效地支持大量细粒度的对象,减少系统...
15. 命令模式:将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志;以及支持可撤销的操作。 16. 访问者模式:表示一个作用于某对象结构中的各元素的操作。它使你可以在不...
《HeadFirst Design Patterns》是设计模式领域中一本非常受欢迎的入门书籍,以其独特的教学方式深受读者喜爱。设计模式是软件工程中的一种最佳实践,它总结了在特定上下文中解决常见问题的经验和方法,使得开发者...
注:在第六章 命令模式(包括)之后一部分为影印版PDF,电脑上是不影响阅读的,手机上应该也没多大问题,介意的慎下
《HeadFirst设计模式JAVA版源码》是一份深入学习设计模式的重要资源,它基于流行的编程语言Java,旨在帮助开发者理解并应用设计模式于实际项目中。设计模式是软件工程中的重要概念,它代表了在特定场景下解决问题的...
行为型模式则关注对象间的责任分配和交互,例如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)、迭代器模式(Iterator)、访问者模式(Visitor)、备忘录...
本资料集合了"Linux常用命令"与"Head First设计模式"两部分,旨在帮助初学者快速入门并深入理解这两个重要主题。 首先,让我们深入探讨"Linux常用命令"。Linux命令行界面提供了强大的操作功能,通过简单的命令,...
行为型设计模式主要关注对象间的责任分配和交互,包括策略模式、模板方法模式、观察者模式、命令模式、迭代器模式、访问者模式、备忘录模式、状态模式、职责链模式和解释器模式。这些模式帮助我们定义对象的行为和...
《Head First 设计模式》是一本面向初学者的权威设计模式指南,中文版的出版使得更多的中国读者能够轻松地理解并掌握这一领域的精髓。设计模式是软件开发中的重要概念,它代表了在特定情境下解决问题的成熟方法,是...
行为型模式则关注于对象间的交互和责任分配,例如策略模式(Strategy)、观察者模式(Observer)和命令模式(Command)。 在《Head First 设计模式》中,作者通过幽默风趣的插图和生动的例子,使得原本可能枯燥的...
3. **行为型模式**:包括策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、命令模式(Command)、备忘录模式(Memento)、状态模式(State)、访问者模式...
- 命令模式(Command):将请求封装为一个对象,以便使用不同的请求、队列请求或参数化不同请求。 - 解释器模式(Interpreter):定义语言的文法,并提供一个解释器来处理这种语言。 - 迭代器模式(Iterator):...
《Head First设计模式》是一本深受开发者欢迎的设计模式教程,以其独特的视觉呈现方式和易于理解的语言,让初学者也能快速掌握设计模式的核心概念。这本书深入浅出地介绍了23种GOF(GoF,Gamma、Erich、Johnson、...
《HeadFirst设计模式》是一本深受开发者喜爱的设计模式学习书籍,中文高清版的出现使得国内读者可以更加方便地理解和掌握这一领域的重要知识。设计模式是软件工程中经过长期实践总结出来的一种解决常见问题的可复用...