博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之命令模式
阅读量:4624 次
发布时间:2019-06-09

本文共 1872 字,大约阅读时间需要 6 分钟。

命令模式的核心是把方法调用封装起来,调用的对象不需要关心是如何执行的。

定义:命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也可以支持撤销操作。

先看一个例子,设计一个家电遥控器的API,可以通过遥控器发出命令来控制不同生产商生产的家电,比如关灯、开灯。

以下是一个简单的代码示例。

1 package cn.sp.test05; 2 /** 3  * 电灯类 4  * @author 2YSP 5  * 6  */ 7 public class Light { 8      9     public void on(){
//打开10 System.out.println("light is on");11 }12 13 public void off(){
//关闭14 System.out.println("light is off");15 }16 }
1 package cn.sp.test05; 2 /** 3  * 命令接口 4  * @author 2YSP 5  * 6  */ 7 public interface Command { 8      9     public void execute();10 }
1 package cn.sp.test05; 2  3 public class LightOnCommand implements Command { 4  5     Light light ;  6      7     public LightOnCommand(Light light){ 8         this.light = light; 9     }10     11     @Override12     public void execute() {13         //调用其方法14         light.on();15     }16 17 }
1 package cn.sp.test05; 2 /** 3  * 简单的遥控器类 4  * @author 2YSP 5  * 6  */ 7 public class SimpleRemoteControl { 8     Command slot; 9 10     public SimpleRemoteControl() {11     }12     13     public void setCommand(Command command){14         this.slot = command;15     }16     //按下按钮调用执行方法17     public void buttonWasPressed(){18         slot.execute();19     }20 }
1 package cn.sp.test05; 2 /** 3  * 设计模式之命令模式 4  * @author 2YSP 5  * 6  */ 7 public class RemoteControlTest { 8  9     public static void main(String[] args) {10         SimpleRemoteControl simpleRemoteControl = new SimpleRemoteControl();11         Light light = new Light();12         //命令还是得靠 电灯自己完成13         LightOnCommand lightOn = new LightOnCommand(light);14         //设置命令15         simpleRemoteControl.setCommand(lightOn);16         //执行17         simpleRemoteControl.buttonWasPressed();18     }19 20 }

运行main方法,输出light is on.

今天才发现线程池用到了这个模式。。。。

更多详细请参考Head First 设计模式。

转载于:https://www.cnblogs.com/2YSP/p/6921347.html

你可能感兴趣的文章
初级前端自学react-native,必备知识点(ES6+ReactJS+flexbox)
查看>>
JAVA 9 新特性
查看>>
Java还是程序员的金饭碗
查看>>
Qt - 设置TableWidget只读
查看>>
Lucene:信息检索与全文检索
查看>>
J2EE开发之常用开源项目介绍
查看>>
8. String to Integer (atoi)
查看>>
移动硬盘磁盘结构损坏且无法读取文件怎样恢复
查看>>
学习记录(部分myeclipse快捷键,一些面试题),有点乱,但是挺有用
查看>>
poj2114 Boatherds
查看>>
maven学习(上)- 基本入门
查看>>
20165231 实验一 Java开发环境的熟悉
查看>>
移动商城第八篇【添加商品之基本属性和大字段数据(FCK文本编辑器)】
查看>>
Solr学习总结(六)SolrNet的高级用法(复杂查询,分页,高亮,Facet查询)
查看>>
对象序列化和反序列化
查看>>
6.10
查看>>
lcd_1602
查看>>
三年工作总结
查看>>
循环不变式证明算法的正确性
查看>>
实现算法2.15、2.16的程序(一个数组只生成一个静态链表)
查看>>