Head First 设计模式 --6 命令模式
命令模式:将“请求”封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。
用到的原则:
1、封装变化
2、组合优于继承
3、针对接口编程,不能针对实现编程
4、解耦
5、类对修改关闭,对扩展开放
6、依赖抽象,不依赖具体
命令模式很好理解,直接看代码
interface Commend {
public void execute();
}
class Light {
public void on() {
System.out.println("light on");
}
public void off() {
System.out.println("light off");
}
}
class LintOnCommend implements Commend {
Light light;
public LintOnCommend(Light light) {
this.light = light;
}
@Override
public void execute() {
light.on();
}
}
class SimpleRemoteControl {
Commend commend;
public SimpleRemoteControl() {}
public void setCommend(Commend commend) {
this.commend = commend;
}
public void buttonWasPressed() {
commend.execute();
}
}
public class Test {
public static void main(String[] args) {
SimpleRemoteControl control = new SimpleRemoteControl();
Light light = new Light();
LintOnCommend onCommend = new LintOnCommend(light);
control.setCommend(onCommend);
control.buttonWasPressed();
}
}
类图

命令模式主要就是让类具有单一权责,每个类只干自己的事,不关心具体的类型。就像SimpleRemoteControl中,只需要给它一名命令就去执行,不管这个命令的具体类型是什么。
还有要说的是设计技巧,也就是需要好好理解一下类图。
书中第六章还有更加高大上的例子,简单的实现了遥控器的实现原理还有回到上一个命令的方法。也有将一组命令组合到一个命令的方法,然后利用这个原理可以实现队列请求,日志请求。我只是学习一下设计模式,并没有打算把整个书抄下来。
Head First 设计模式 --6 命令模式的更多相关文章
- 设计模式 ( 十三 ) 命令模式Command(对象行为型)
设计模式 ( 十三 ) 命令模式Command(对象行为型) 1.概述 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需 ...
- 乐在其中设计模式(C#) - 命令模式(Command Pattern)
原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...
- 面向对象设计模式_命令模式(Command)解读
在.Net框架中很多对象的方法中都会有Invoke方法,这种方法的设计实际是用了设计模式的命令模式, 模式图如下 其核心思路是将Client 向Receiver发送的命令行为进行抽象(ICommand ...
- 折腾Java设计模式之命令模式
博客原文地址 折腾Java设计模式之命令模式 命令模式 wiki上的描述 Encapsulate a request as an object, thereby allowing for the pa ...
- 用Java 8 Lambda表达式实现设计模式:命令模式
在这篇博客里,我将说明如何在使用 Java 8 Lambda表达式 的函数式编程方式 时实现 命令 设计模式 .命令模式的目标是将请求封装成一个对象,从对客户端的不同类型请求,例如队列或日志请求参数化 ...
- python设计模式之命令模式
python设计模式之命令模式 现在多数应用都有撤销操作.虽然难以想象,但在很多年里,任何软件中确实都不存在撤销操作.撤销操作是在1974年引入的,但Fortran和Lisp分别早在1957年和195 ...
- C#设计模式(15)——命令模式(Command Pattern)
一.前言 之前一直在忙于工作上的事情,关于设计模式系列一直没更新,最近项目中发现,对于设计模式的了解是必不可少的,当然对于设计模式的应用那更是重要,可以说是否懂得应用设计模式在项目中是衡量一个程序员的 ...
- 【GOF23设计模式】命令模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_命令模式.数据库事务机制底层架构实现.撤销和回复 package com.test.command; public cla ...
- iOS设计模式之命令模式
命令模式 基本理解 命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户端进行参数化:对请求队列或记录请求日志,以及支持客可撤离的操作. 苹果的Target-Action ...
随机推荐
- 《Linux内核分析》第五周 扒开系统调用的三层皮(下)
[刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK FIVE( ...
- 使用Mod_JK链接Apache和Tomcat
There are many potential problems associated with the default configuration of mod_jk. Let's say it ...
- 大商创开通用户和店铺 sql追踪
添加用户(账号:wmy123 ,密码:wzd222,id:69)INSERT INTO `dsc1`.`dsc_users` (user_name,mobile_phone,email,passwor ...
- cocos2dx 3.x(TexturePacker进行图片加密)
游戏开发过程中要涉及到大量的图片,使用TexturePacker可以把小图合成大图.这是我们使用最多的功能,但是TexturePacker还带有对图片加密的功能.之前还是对加密不慎了解,所以写下来分享 ...
- opencv实现图像邻域均值滤波、中值滤波、高斯滤波
void CCVMFCView::OnBlurSmooth()//邻域均值滤波 { IplImage* in; in = workImg; IplImage* out = cvCreateImage( ...
- JQuery拖拽排序
1,引用JqueryUI $(function(){ $(".m_title").bind('mouseover',function(){ $(this).css("cu ...
- SQL注入POC
mysql #encoding=utf-8 import httplib import time import string import sys import random import urlli ...
- javascript面向对象详解
认识面向对象 1.面向对象中的概念 一切事物皆对象 对象具有封装和继承特性 信息隐藏 2.基本面向对象 3.函数构造器构造对象 深入了解面向对象 第一种书写格式 第二种书写格式
- bzoj2729 [HNOI2012]排队
组合数学,推一下式子,并不难推. java代码 import java.io.*; import java.math.BigInteger; import java.util.*; public cl ...
- oracle分层查询中的start with和connect by(树结构查询)
来源: http://blog.csdn.net/itmyhome1990/article/details/16338637 ORACLE是一个关系数据库管理系统,它用表的形式组织数据,在某些表 ...