命令模式(电脑开机命令)

在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来设计,使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活。

命令模式可以对发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求,这就是命令模式的动机。

例如: 当我们进行电脑开机时,我们只需要按下开机键也就是发送开机命令,不管我们用的台式机还是笔记本、惠普的还是联想的,我们只需要知道开机命令并且发送它,具体谁执行开机命令我们并不关心。

定义主板:

public interface MainBoard {
public void open();
}

定义主板实现类:

1 public class GigaMainBoard implements MainBoard {
2
3     @Override
4     public void open() {
5     System.out.println("主板正在开机...");
6     System.out.println("机器已经正常打开,请操作...");
7     }
8
9 }

定义命令接口:

public interface Command {
public void excute();
}

定义命令的具体实现类:

 1 /**
 2  * 持有真正实现命令的接收者----主板对象
 3  * @author Administrator
 4  *
 5  */
 6
 7
 8 public class OpenCommand implements Command {
 9
10     private MainBoard mainboard   = null;
11     /*
12      * 构造方法,传入主板对象
13      */
14
15     public OpenCommand(MainBoard mainboard) {
16         super();
17         this.mainboard = mainboard;
18     }
19
20
21     @Override
22     public void excute() {
23     //对于命令对象,根本不知道如何开机,回转调主板对象
24     //让主板去完成开机的功能
25       this.mainboard.open();
26     }
27
28 }

提供机箱:

 1 public class Box {
 2 /**
 3  *开机命令对象
 4  */
 5 private Command opencommend;
 6 /**
 7  * 设置开机命令对象
 8  */
 9 public void setOpencommend(Command opencommend) {
10     this.opencommend = opencommend;
11 }
12 /**
13  * 提供给客户使用,接收并响应用户请求,相当于按钮被按下的触发方法
14  */
15 public void openButtonPressed() {
16     //按下按钮,执行命令
17     opencommend.excute();
18 }
19
20 }

客户测试:

 1 public class CommandPattern {
 2
 3     public static void main(String[] args) {
 4 //1.把命令和真正的实现组合起来,相当于在组装机器
 5 //把机箱上按钮的连接线插接到主板上
 6
 7 //定义主板
 8 MainBoard mainBoard = new GigaMainBoard();
 9 //定义开机命令,为开机命配备具体主板
10 OpenCommand openCommand = new OpenCommand(mainBoard);
11
12 //2.为机箱上的按钮设置对应的命令,让按钮知道该干什么
13
14 //定义机箱(开机按钮)
15 Box box = new Box();
16 //为机箱设置开机命令
17 box.setOpencommend(openCommand);
18
19 //3.然后模拟按下机箱上的按钮
20 box.openButtonPressed();
21     }
22
23
24 /*
25  * 在客户测试步骤中我们可以发现,机箱与主板并无直接的关系,中间由开机命令链接
26  * 机箱只知道可以机箱发送开机的命令有对象去执行,不需要知道执行命令的主板是哪个
27  */
28 }

运行结果:

主板正在开机...
机器已经正常打开,请操作...
时间: 2024-08-05 23:41:06

命令模式(电脑开机命令)的相关文章

JavaScript设计模式与开发实践---读书笔记(9) 命令模式

命令模式的用途: 命令模式是最简单和优雅的模式之一,命令模式中的命令(command)指的是一个执行某些特定事情的指令. 命令模式最常见的应用场景是:有时候需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是什么.此时希望用一种松耦合的方式来设计程序,使得请求发送者和请求接收者能够消除彼此之间的耦合关系. 命令模式的例子-菜单程序: <!DOCTYPE html> <html lang="en"> <head> <met

设计模式(23)-----命令模式

命令模式(command) 定义 将一个请求封装成为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作. UML类图 角色 Command:定义命令的统一接口 ConcreteCommand:Command接口的实现者,用来执行具体的命令,某些情况下可以直接用来充当Receiver. Receiver:命令的实际执行者 Invoker:命令的请求者,是命令模式中最重要的角色.这个角色用来对各个命令进行控制. 例子 电视机功能接口类 package c

设计模式 命令模式 之 管理智能家电

继续设计模式哈,今天带来命令模式,二话不说,先看定义: 定义:将“请求”封装成对象,以便使用不同的请求.队列或者日志来参数化其他对象.命令模式也支持可撤销的操作. 这尼玛定义,看得人蛋疼,看不明白要淡定,我稍微简化一下:将请求封装成对象,将动作请求者和动作执行者解耦.好了,直接用例子来说明. 需求:最近智能家电很火热啊,未来尼玛估计冰箱都会用支付宝自动买东西了,,,,假设现在有电视.电脑.电灯等家电,现在需要你做个遥控器控制所有家电的开关,要求做到每个按钮对应的功能供用户个性化,对于新买入家电要

设计模式 之 命令模式

命令模式强调的是“封装调用”,即把方法调用封装起来.通过封装方法调用,我们可以把运算块封装成型,所以调用该运算的对象不需要关心事情是如何运行的,他们只需要知道如何使用包装成型的方法来完成它就可以了.通过封装方法调用,我们也可以做一些很聪明的事情,比如记录日志,或者重复使用这些封装来实现撤销. 我们通过下面这个例子 来了解命令模式:我们要设计一个家电自动化遥控器,这个遥控器具有多个可编程的插槽(每个插槽可以指定到一个不同的家电设备),每个插槽都对应一对开关按钮,整个遥控器还具备一个整体的撤销按钮,

再次理解——命令模式

命令模式是:将一个请求封装为对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作. 如何使用洗衣机:你使用洗衣机时,仅仅是去拧动按钮,就可以开始洗衣服了.不需知道如何让洗衣机去洗衣服,这就是典型的命令模式.即命令对象(洗衣服命令.脱水命令)并不知道如何处理命令,会有相应的接收者对象来执行命令(驱动器). 本例子中:把洗衣服命令和脱水命令封装为对象:调用者Invoker的参数是不同的请求:调用者Invoker实施对请求的排队.记录.撤销等操作.而驱动器Dri

理解设计模式之----命令模式

零零碎碎的了解过部分设计模式,但没有系统的学习过,最近晚上有点时间,就买了本程杰的<大话设计模式>,最近想系统的学习下.当看到命令模式的时候,感觉并不是太好理解,于是上网搜索了些资料.发现对设计模式的看法多少很多文章都有些不一样,于是想写下自己对命令模式的一些看法,以加深理解.要是文章有不对的地方,希望大家能提出改进建议. 目的: 任何模式的出现,都是为了解决一些特定的场景的耦合问题,以达到对修改封闭,对扩展开放的效果.命令模式也不例外: 命令模式是为了解决命令的请求者和命令的实现者之间的耦合

第 12 章 命令模式【Command Pattern】

以下内容出自:<<24种设计模式介绍与6大设计原则>> 今天讲命令模式,这个模式从名字上看就很简单,命令嘛,老大发命令,小兵执行就是了,确实是这个意思,但是更深化了,用模式来描述真是是世界的命令情况.正在看这本书的你,我猜测分为两类:已经工作的和没有工作的,先说没有工作的,那你为啥要看这本书,为了以后工作呗,只要你参见工作,你肯定会待在项目组,那今天我们就以项目组为例子来讲述命令模式. 我是我们部门的项目经理,就是一个项目的头,在中国做项目,项目经理就是什么都要懂,什么都要管,做好

《JAVA与模式》之命令模式

命令模式属于对象的行为模式.命令模式又称为行动(Action)模式或交易(Transaction)模式. 命令模式把一个请求或者操作封装到一个对象中.命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能. 命令模式的结构 命令模式是对命令的封装.命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象. 每一个命令都是一个操作:请求的一方发出请求要求执行一个操作:接收的一方收到请求,并执行操作.命令模式允许请求的一方和接收的一方独立开来,

第16章 行为型模式—命令模式

1. 命令模式(Command Pattern)的定义 (1)定义 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作. ①封装请求:抽象出需要执行的动作,封装成对象(有统一的接口). ②参数化:可以用不同的命令对象,去参数化配置客户的请求.(即,将命令对象作为参数去供Invoker调用). (2)命令模式的结构和说明 ①Command:定义命令的接口,声明执行的方法 ②ConcreteCommand:命令接口实现对象,是“虚”的实现