(将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。)

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

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

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

定义主板:

public interface MainBoard {
public void open();
}

定义主板实现类:

 public class GigaMainBoard implements MainBoard {

     @Override
public void open() {
System.out.println("主板正在开机...");
System.out.println("机器已经正常打开,请操作...");
} }

定义命令接口:

public interface Command {
public void excute();
}

定义命令的具体实现类:

 /**
* 持有真正实现命令的接收者----主板对象
* @author Administrator
*
*/ public class OpenCommand implements Command { private MainBoard mainboard = null;
/*
* 构造方法,传入主板对象
*/ public OpenCommand(MainBoard mainboard) {
super();
this.mainboard = mainboard;
} @Override
public void excute() {
//对于命令对象,根本不知道如何开机,回转调主板对象
//让主板去完成开机的功能
this.mainboard.open();
} }

提供机箱:

 public class Box {
/**
*开机命令对象
*/
private Command opencommend;
/**
* 设置开机命令对象
*/
public void setOpencommend(Command opencommend) {
this.opencommend = opencommend;
}
/**
* 提供给客户使用,接收并响应用户请求,相当于按钮被按下的触发方法
*/
public void openButtonPressed() {
//按下按钮,执行命令
opencommend.excute();
} }

客户测试:

 public class CommandPattern {

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

运行结果:

主板正在开机...
机器已经正常打开,请操作...
惠普的还是联想的,
[Huìpǔ de háishì liánxiǎng de,]
HP or Lenovo,
 

命令模式(Command、Recevier、Invoker)(电脑开机命令)的更多相关文章

  1. 命令模式 Command 行为型 设计模式(十八)

    命令模式(Command) 请分析上图中这条命令的涉及到的角色以及执行过程,一种可能的理解方式是这样子的: 涉及角色为:大狗子和大狗子他妈 过程为:大狗子他妈角色 调用 大狗子的“回家吃饭”方法 引子 ...

  2. 设计模式(六):控制台中的“命令模式”(Command Pattern)

    今天的博客中就来系统的整理一下“命令模式”.说到命令模式,我就想起了控制台(Console)中的命令.无论是Windows操作系统(cmd.exe)还是Linux操作系统(命令行式shell(Comm ...

  3. 设计模式 ( 十三 ) 命令模式Command(对象行为型)

    设计模式 ( 十三 ) 命令模式Command(对象行为型) 1.概述         在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需 ...

  4. 乐在其中设计模式(C#) - 命令模式(Command Pattern)

    原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...

  5. 命令模式(Command Pattern)

    命令模式属于对象的行为模式.命令模式又称为行动(Action)模式或交易(Transaction)模式.命令模式把一个请求或者操作封装到一个对象中.命令模式允许系统使用不同的请求把客户端参数化,对请求 ...

  6. Java 设计模式系列(十四)命令模式(Command)

    Java 设计模式系列(十四)命令模式(Command) 命令模式把一个请求或者操作封装到一个对象中.命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复 ...

  7. 二十四种设计模式:命令模式(Command Pattern)

    命令模式(Command Pattern) 介绍将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可取消的操作. 示例有一个Message实体类,某个 ...

  8. 《JAVA设计模式》之命令模式(Command)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述命令(Command)模式的: 命令模式属于对象的行为模式.命令模式又称为行动(Action)模式或交易(Transaction)模式. ...

  9. 设计模式-15命令模式(Command Pattern)

    1.模式动机 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使 ...

  10. 设计模式 - 命令模式(command pattern) 多命令 具体解释

    命令模式(command pattern) 多命令 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.csdn.ne ...

随机推荐

  1. 21分钟教会你分析MaxCompute账单

    背景 阿里云大计算服务MaxCompute是一款商业化的大数据分析平台,其计算资源有预付费和后付费两种计费方式.并且产品每天按照project为维度进行计量计费(账单基本情况下会第二天6点前产出).本 ...

  2. python网络框架Twisted

    什么是Twisted Twisted是一个用python语言写的事件驱动网络框架,它支持很多种协议,包括UDP,TCP,TLS和其他应用层协议,比如HTTP,SMTP,NNTM,IRC,XMPP/Ja ...

  3. 2019/10/9 CSP-S 模拟测

    T1:最大约数和 给定一个正整数 S,现在要求你选出若干个互不相同的正整数,使得它们的和不大于 S,而且每个数的因数(不包括本身)之和最大.S <= 1000 分析: 其实考完才听他们说是背包, ...

  4. SEO-----网站不被收录的原因

    1.  新站的收录较慢 2. 文章质量不高 文章难以阅读  排版乱 内容是别的网站采集来的  很难被收录 3. 网站被降权中 4. 蜘蛛不访问[网站配置] 检查网站是否屏蔽了蜘蛛的爬取[ robots ...

  5. 关于获取webview(窗口间关系)的方法

    1.获取指定页面ID的webview plus.webview.getWebviewById('为页面设置的id值'): 该方法主要用于首页底部导航切换到子页面时不执行子页面的函数,因为在设置导航的时 ...

  6. <jsp:forward page=""></jsp:forward>标签失效异常

    解决方案:在web.xml <filter-mapping>          <filter-name>struts2</filter-name>         ...

  7. Java - 关于覆盖和重写的总结

    公众号偶然看到的一个帖子,构造方法,类方法,final方法,哪些能覆盖,哪些能重载,初学时也是被这些术语搞的很迷糊 现在有时间了对这些做一个总结.全是自己的语言,可能不是很全面,表达意思应该够清楚 一 ...

  8. Python学习day40-并发编程(终)

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  9. CSS 的overflow:hidden (清除浮动)

    verflow:hidden这个CSS样式是大家常用到的CSS样式,但是大多数人对这个样式的理解仅仅局限于隐藏溢出,而对于清除浮动这个含义不是很 了解.一提到清除浮动,我们就会想到另外一个CSS样式: ...

  10. Link-Cut Tree(LCT)

    转载自LCT(Link-Cut Tree)详解(蒟蒻自留地) 如果你还没有接触过LCT,你可以先看一看这里: (看不懂没关系,先留个大概的印像)http://www.cnblogs.com/BLADE ...