命令模式第一篇

需求:现有一个遥控器,有七个可编程的插槽,每个插槽都对应开关按钮,遥控器还具备一个整体的撤销按钮。

可控装置:电灯、风扇、热水器、音响设备和其它类似的可控制装备。要求能够控制目前的装置和任何未来可能出现的装置。

我们把这个过程想象成餐厅吃饭的过程:顾客根据菜单点单,然后将订单给服务员,服务员将订单放到厨房柜台上,厨师拿到订单进行执行,制作出美味的饭菜。

在这里,遥控器就是一个远程控制,它掌握一系列的命令接口,当我们按下遥控器按钮时,发出相应的命令进行执行,相应的命令对象接收到执行命令后发送命令给具体执行者,具体执行者收到命令并执行相应的行文。这就达到了请求者与具体执行者解耦的目的。

首先把问题简化,假设我们只有一个遥控器,它只有一个按钮和对应的插槽,可以控制一个装置。

设计图如下:

实现代码如下:

远程控制类SimpleRemoteControl :

public class SimpleRemoteControl {
Command slot;

public SimpleRemoteControl(){}

public Command getSlot() {
return slot;
}

public void setSlot(Command slot) {
this.slot = slot;
}

public void buttonWasPressed()
{
slot.execute();
}

}

命令接口Command:

public interface Command {
public void execute();
}

具体命令类:

灯泡开命令类LightOnCommand:

public class LightOnCommand implements Command{
Light light;
public LightOnCommand(Light light)
{
this.light=light;
}
@Override
public void execute() {
// TODO Auto-generated method stub
light.on();
}

}

灯泡关命令类:

public class LightOffCommand implements Command{
Light light;
public LightOffCommand(Light light)
{
this.light=light;
}
@Override
public void execute() {
// TODO Auto-generated method stub
light.off();
}

}

车门开命令类:

public class GargeDoorOpenCommand implements Command{
GargeDoor gargeDoor;
public GargeDoorOpenCommand(GargeDoor gargeDoor)
{
this.gargeDoor=gargeDoor;
}
@Override
public void execute() {
// TODO Auto-generated method stub
gargeDoor.open();
}

}

车门关命令类:

public class GargeDoorCloseCommand implements Command{
GargeDoor gargeDoor;
public GargeDoorCloseCommand(GargeDoor gargeDoor)
{
this.gargeDoor=gargeDoor;
}
@Override
public void execute() {
// TODO Auto-generated method stub
gargeDoor.close();
}

}

最后接收执行者类:

灯泡:

public class Light {
public void on()
{
System.out.println("light is on");
}
public void off()
{
System.out.println("light is close");
}
}

车门:

public class GargeDoor {
public void open()
{
System.out.println("door is open");
}
public void close()
{
System.out.println("door is close");
}
}

测试类:

public class RemoteControlTest {
public static void main(String[] args)
{
SimpleRemoteControl remote=new SimpleRemoteControl();
Light light=new Light();
LightOnCommand lightOn=new LightOnCommand(light);
remote.setSlot(lightOn);
remote.buttonWasPressed();
GargeDoor gargeDoor=new GargeDoor();
GargeDoorOpenCommand gargeDoorOpen=new GargeDoorOpenCommand(gargeDoor);
remote.setSlot(gargeDoorOpen);
remote.buttonWasPressed();
}
}

命令模式第一篇

时间: 2024-10-10 05:18:56

命令模式第一篇的相关文章

命令模式第二篇

命令模式第一篇中把问题简化成一个遥控器,它只有一个按钮和对应的插槽,可以控制一个装置. 根据需求,现在有7个插槽,每个插槽都有一个开和关按钮,可以控制一个装置.只需将远程控制 对象中的单个命令组件换成命令组件数组即可.再加一个控制整个装置的撤销按钮. 实现代码如下: public interface Command { public void execute(); public void undo();} public class GargeDoorCloseCommand implements

代理模式第一篇

简单的说就是有一个远程服务和若干台监视器,监视器用来监视远程服务中的有关数据.监视任务的 障碍点在于远程服务和监视器程序不在同一个JVM上.这就导致监视器没法在本地直接调用服务器的 方法对其进行监控.我们需要一个代理来,监视器所做的就像是在做远程方法调用,但其实只是调用 本地堆中的"代理"对象上的方法,再由代理处理所有网络通信的低层细节. 制作远程服务的步骤: 1:制作远程接口,接口定义了要供客户调用的远程方法. MyRemote.java : interface MyRemote e

[转] git config命令使用第一篇——介绍,基本操作,增删改查

平时我们在使用git的时候,很少去关注其配置是如何,而在实际开发中,对git config这个命令的使用也并不是很多,但是配置对一个程序和项目来说都是很重要的,我们今天来看看git的配置以及git config的初步应用.     1. git config简介 我们知道config是配置的意思,那么git config命令就是对git进行一些配置.而配置一般都是写在配置文件里面,那么git的配置文件在哪里呢?互动一下,先问下大家. 你们所知的git配置文件是放在哪里的?git有几个配置文件呢?

Java进阶篇设计模式之八 ----- 责任链模式和命令模式

前言 在上一篇中我们学习了结构型模式的享元模式和代理模式.本篇则来学习下行为型模式的两个模式, 责任链模式(Chain of Responsibility Pattern)和命令模式(Command Pattern). 责任链模式 简介 责任链模式顾名思义,就是为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行为型模式.在这种模式中,通常每个接收者都包含对另一个接收者的引用.如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接

tcpdump命令行抓包(第一篇)

tcpdump可以获取流动在网卡上的数据 tcpdump [ -AdDefIKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count ] [ -C file_size ] [ -G rotate_seconds ] [ -F file ] [ -i interface ] [ -m module ] [ -M secret ] [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ] [ -W filecount

设计模式第六篇-命令模式

一.引言 先看需求:设计一个家电遥控器系统,每个家电由开.关两个按钮控制, 每个家电都由各自的厂商提供了实现方法,我们只需要调用这些方法即可,如图所示: 如何实现这个功能呢? 第一步我们要排除的实现方式就是if条件判断,因为一旦增加家电,我们就必须修改代码,这不符合我们的设计思路. 然后我们想想,遥控按钮只是发出一个请求,具体的实现是通过各自厂商的API,我们应该让遥控器(动作的请求者)从厂商的API(动作的执行者)中解耦出来.可是怎么去解耦呢?毕竟按钮动作和家电行为是息息相关的. 这个时候就可

[设计模式篇] 命令模式

我时常以为,所谓的“设计模式”,更多像是一种方法论,而不应该算作所谓的“知识点”.这些就像高中数学有专门的解题方法集合,形如“不等式逼等式”(证明一个未知数大于等于一个值,同时又证明这个未知数小于等于这个值,那么这个未知数只能是这个值)这样的方法一般,根本没法说得非常具体.而这才是所谓“知识”大放异彩的地方,没有这些无数人总结出来的具体的方法,让我们通过个人总结对现有的知识点进行链接来形成一套,哪怕只是一个小小的方法,或者模式,都是很难得的.如果将学高中数学的方法论做一个合理的外推,那么程序设计

设计模式第17篇:命令模式

一.命令模式介绍 命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式.命令模式的本质是对请求进行封装,一个请求对应于一个命令,每一个命令都是一个操作:请求的一方发出请求要求执行一个操作:接收的一方收到请求,并执行相应的操作.命令模式允许请求的一方和接收的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求如何被接收.操作是否被执行.何时被执行,以及是怎么被执行的.        命令模式的关键在于引入了抽象命令类,请求发送者针对

U-BOOT-2016.07移植 (第一篇) 初步分析

U-BOOT-2016.07移植 (第一篇) 初步分析 目录 U-BOOT-201607移植 第一篇 初步分析 目录 编译和移植环境 更新交叉编译工具 1 下载arm-linux-gcc 443 2 安装arm-linux-gcc 443 安装环境Ubuntu 910 下载u-boot-201607并解压 分析顶层Makefile 1 找出目标依赖关系 2 总结 初次编译u-boot 1 配置 2 编译 分析u-boot启动流程 1 分析startS 2 分析crt0S 3 总结 1. 编译和移