java 之 命令模式(大话设计模式)
命令模式,笔者一直以为当我们开发的过程中基本上很难用到,直到维护阶段或者重构阶段,我们会发现有些撤销命令和追加命令比较频繁时,自然而然就用到命令模式。
先看下类图
大话设计模式-类图

简单说下类图,最开始笔者看大话设计模式的时候也不是很喜欢看类图,主要原因是看不懂,后来当笔者第一次看完设计模式后,才真正意义上的理解类图。
在现在的工作中笔者查看设计模式时,基本上都是直接看类图,不会再去看demo。所以在这里笔者鼓励大家多看类图,并明白类图的意义,也不用过于刻意去看,
当大家明白一个设计模式后,再去重新看下类图,相信大家会有收获的。好了,先看下笔者的demo。
/**
* 烧烤师傅
*/
public class Barbecue { public void makeMutton() {
System.out.println("烤羊肉串");
} public void makeChicken() {
System.out.println("考鸡肉串");
}
}
/**
* 命令抽象父类
*/
public abstract class Commond { private Barbecue barbecue; public Commond(Barbecue barbecue) {
super();
this.barbecue = barbecue;
} public abstract void excuteCommond(); public Barbecue getBarbecue() {
return barbecue;
} public void setBarbecue(Barbecue barbecue) {
this.barbecue = barbecue;
}
}
/**
* 烤鸡翅命令
*/
public class ChickenCommond extends Commond{ public ChickenCommond(Barbecue barbecue) {
super(barbecue);
}
@Override
public void excuteCommond() {
super.getBarbecue().makeChicken();
} }
/**
* 烤羊腿命令
*/
public class MuttonCommod extends Commond{ public MuttonCommod(Barbecue barbecue) {
super(barbecue);
}
@Override
public void excuteCommond() {
super.getBarbecue().makeMutton();
} }
/**
* 服务员
*/
public class Waiter { private List<Commond> commonds = new ArrayList<>(); public void addCommond(Commond commond) {
// TODO 可以做很多事情 记日志等等
commonds.add(commond);
} public void removeCommond(Commond commond) {
// TODO 可以做很多事情 记日志等等
commonds.remove(commond);
} public void Notify() {
for (Commond commond : commonds) {
commond.excuteCommond();
}
}
}
/**
* 客户端
*/
public class Test { public static void main(String[] args) {
Barbecue barbecue = new Barbecue();
Commond commond = new ChickenCommond(barbecue);
Waiter waiter = new Waiter();
waiter.addCommond(commond);
waiter.Notify();
}
}
运行结果如下
考鸡肉串
大话设计模式一共24个设计模式,笔者坚持每天更新一篇,有时工作忙没能及时更新。大话设计模式更新完毕,笔者会更新JVM虚拟机的相关知识,当然也是以笔者切身感受去写。
以上,希望能帮助学习命令模式的小伙伴。
java 之 命令模式(大话设计模式)的更多相关文章
- OOP设计模式[JAVA]——04命令模式
命令模式 命令模式的意图 命令模式属于对象的行为模式.别名又叫:Action或Transaction. 命令模式把一个请求或者操作封装到一个对象中.命令模式允许系统使用不同的请求把客户端参数化,对请求 ...
- Spring IOC 方式结合TESTGN测试用例,测试简单java的命令模式
java命令模式: 可以命令("请求")封装成一个对象,一个命令对象通过在特定的接收着上绑定一组动作来封装一个请求.命令对象直接把执行动作和接收者包进对象中,只对外暴露出执行方法的 ...
- java 之 适配器模式(大话设计模式)
适配器模式,笔者不是很推荐在项目初期阶段使用,在笔者看来这个设计模式就是套接了一层,从而达到能够迎合现有的外部接口规范. 先来简单的看下类图: 大话设计模式-类图 这个模式理解起来非常简单,A→B因为 ...
- java 之 单例模式(大话设计模式)
笔者记得去面试时曾被问起这个模式,当时还没有看过设计模式,对设计模式基本上一无所知,不过可以肯定的是笔者用过单例模式.当时回答的风马牛不相及,很尴尬. 也是从那时起,开始学习设计模式.今天所说的就是单 ...
- Java之命令模式(Command Pattern)
转自:http://www.cnblogs.com/devinzhang/archive/2012/01/06/2315235.html 1.概念 将来自客户端的请求传入一个对象,从而使你可用不同的请 ...
- java 之 代理模式(大话设计模式)
java代理模式顾名思义,就类似于大学,我想和冰可乐,可是我又在玩游戏,于是我让我的室友帮我把可乐带回来,简单的来说我的室友就是代理,而买可乐就是需要做的行为.这是笔者理解的代理模式 大话设计模式-类 ...
- 行为型-命令模式(Command)
装修新房的最后几道工序之一是安装插座和开关,通过开关可以控制一些电器的打开和关闭,例如电灯或者排气扇.在购买开关时,我们并不知道它将来到底用于控制什么电器,也就是说,开关与电灯.排气扇并无直接关系,一 ...
- 大话设计模式(C#)
还是那几句话: 学无止境,精益求精 十年河东,十年河西,莫欺少年穷 学历代表你的过去,能力代表你的现在,学习代表你的将来 问个问题: 如何写出高质量的代码?灵活,可扩展,易读,易维护,可重构,可复用. ...
- iOS开发-命令模式
命令模式算是设计模式中比较简单的,最常见的例子是工作任务安排下来进行编程,如果工作任务不需要完成,我们可以取消我们之前完成的代码,也可以理解为回滚撤销操作.这里面涉及到命令模式中的两个对象,一个是动作 ...
随机推荐
- T9
T9 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission ...
- LR多分类推广 - Softmax回归*
LR是一个传统的二分类模型,它也可以用于多分类任务,其基本思想是:将多分类任务拆分成若干个二分类任务,然后对每个二分类任务训练一个模型,最后将多个模型的结果进行集成以获得最终的分类结果.一般来说,可以 ...
- html5 postMessage解决跨域、跨窗口消息传递[转载]
原文:http://www.cnblogs.com/dolphinX/p/3464056.html 一些麻烦事儿 平时做web开发的时候关于消息传递,除了客户端与服务器传值还有几个经常会遇到的问题 1 ...
- counter 计数器
包含了两个属性和一个方法: 1. counter-reset 2. counter-increment 3. counter()/counters() counter-reset(主要作用就是给计 ...
- vue初级学习--idea的环境搭建
一.导语 最近接触了下idea,虽然我对于各种"代码界的神器"没有多大感冒,一个eclipse或者myeclipse,一个Notepad++ .一个就可以把我征服,但还是蛮喜欢id ...
- phpstorm2016.3+xdebug调试
1.首先打开PHP配置文件,php.in修改相关xedebug配置 ; XDEBUG Extension [xdebug] zend_extension ="d:/wamp64/bin/ph ...
- iOS字符串修改及运用
//创建字符串 直接赋值 NSString *lytTest = @"A common string"; 1.获取字符串的长度 NSLog(@"%d",lytT ...
- Delphi工程版本号修改工具
自动修改某目录下符合条件的Delphi工程(dproj)版本号, 支持命令行调用支持通配符忽略文件 -p [Path] 在[Path]路径下查询所有dproj文件(可以为空, 默认路径为程序当前路径) ...
- [转载] 基于Redis实现分布式消息队列
转载自http://www.linuxidc.com/Linux/2015-05/117661.htm 1.为什么需要消息队列?当系统中出现“生产“和“消费“的速度或稳定性等因素不一致的时候,就需要消 ...
- tornado超时机制
1.https://blog.lzhaohao.info/archive/build-a-comet-application-using-tornado-and-nginx/ 2.http://qin ...