GoF--命令设计模式
- //执行命令的接口
- public interface Command {
- void execute();
- }
- //命令接收者Receiver
- public class Tv {
- public int currentChannel = 0;
- public void turnOn() {
- System.out.println("The televisino is on.");
- }
- public void turnOff() {
- System.out.println("The television is off.");
- }
- public void changeChannel(int channel) {
- this.currentChannel = channel;
- System.out.println("Now TV channel is " + channel);
- }
- }
- //开机命令ConcreteCommand
- public class CommandOn implements Command {
- private Tv myTv;
- public CommandOn(Tv tv) {
- myTv = tv;
- }
- public void execute() {
- myTv.turnOn();
- }
- }
- //关机命令ConcreteCommand
- public class CommandOff implements Command {
- private Tv myTv;
- public CommandOff(Tv tv) {
- myTv = tv;
- }
- public void execute() {
- myTv.turnOff();
- }
- }
- //频道切换命令ConcreteCommand
- public class CommandChange implements Command {
- private Tv myTv;
- private int channel;
- public CommandChange(Tv tv, int channel) {
- myTv = tv;
- this.channel = channel;
- }
- public void execute() {
- myTv.changeChannel(channel);
- }
- }
- //可以看作是遥控器Invoker
- public class Control {
- private Command onCommand, offCommand, changeChannel;
- public Control(Command on, Command off, Command channel) {
- onCommand = on;
- offCommand = off;
- changeChannel = channel;
- }
- public void turnOn() {
- onCommand.execute();
- }
- public void turnOff() {
- offCommand.execute();
- }
- public void changeChannel() {
- changeChannel.execute();
- }
- }
- //测试类Client
- public class Client {
- public static void main(String[] args) {
- // 命令接收者Receiver
- Tv myTv = new Tv();
- // 开机命令ConcreteCommond
- CommandOn on = new CommandOn(myTv);
- // 关机命令ConcreteCommond
- CommandOff off = new CommandOff(myTv);
- // 频道切换命令ConcreteCommond
- CommandChange channel = new CommandChange(myTv, 2);
- // 命令控制对象Invoker
- Control control = new Control(on, off, channel);
- // 开机
- control.turnOn();
- // 切换频道
- control.changeChannel();
- // 关机
- control.turnOff();
- }
- }
执行结果
- The televisino is on.
- Now TV channel is 2
- The television is off.
GoF--命令设计模式的更多相关文章
- 猿取向的规划设计模式 ——GoF《设计模式》阅读摘要(零)
这个话题是很奇怪,设计模式是引导程序的设计不是模仿什么软件?呃.我的意思是,这是 面"对象"相对的设计模式. 我曾见过有人写<给妻子解释设计模式>,这样的把计算机中的思 ...
- Design Pattern Command 命令设计模式
这种设计模式是使用不同类的包裹不同的命令,达到什么样的命令执行什么操作. 有可能进一步利用map您最喜欢的对接命令字. 正在运行的类实际上已经包含了操作的所有需求,例如: class SuperMak ...
- Command模式(命令设计模式)
Command?? 把方法的调用用一个类的实例来承载,要管理工作的历史记录,创建这些方法执行的命令的集合,只需管理这些实例的集合即可,而且还可以随时再次执行过去的命令,或是将多个过去的命令整合为一个新 ...
- 使用C# (.NET Core) 实现命令设计模式 (Command Pattern)
本文的概念内容来自深入浅出设计模式一书. 项目需求 有这样一个可编程的新型遥控器, 它有7个可编程插槽, 每个插槽可连接不同的家用电器设备. 每个插槽对应两个按钮: 开, 关(ON, OFF). 此外 ...
- 实践GoF的设计模式:迭代器模式
摘要:迭代器模式主要用在访问对象集合的场景,能够向客户端隐藏集合的实现细节. 本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:迭代器模式>,作者:元闰子. 简介 有时会遇到这 ...
- [设计模式]Netd中的命令设计模式
命令模式 有如下的角色: (1)调用者(invoker) (2)命令接收者(receiver) (3)客户端(client) (4)命令对象(command) public interface Com ...
- 使用 C# (.NET Core) 实现命令设计模式 (Command Pattern)
本文的概念内容来自深入浅出设计模式一书. 项目需求 有这样一个可编程的新型遥控器, 它有7个可编程插槽, 每个插槽可连接不同的家用电器设备. 每个插槽对应两个按钮: 开, 关(ON, OFF). 此外 ...
- 面向程序猿的设计模式 ——GoF《设计模式》读书总结(壹)抽象工厂&生成器
第一部分:创建型模式 创建型模式抽象了实例化过程. 它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.(把一些小的对象组装成大对象,这个工作由专门的类对象来做) 一个类创建型模式使用继承改变被实 ...
- .NET设计模式(17):命令模式(Command Pattern)(转)
概述 在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”.但在某些场合,比如要对行为进行“记录.撤销/重做.事务”等处理,这种无法抵御变化的紧耦合是不合适的.在这种情况下,如何将“行为 ...
- C#命令模式-设计模式学习
命令模式(Command Pattern) 概述 在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”.但在某些场合,比如要对行为进行“记录.撤销/重做.事务”等处理,这种无法抵御变 ...
随机推荐
- ios runtime的相关知识
一.iOS runtime原理 对于runtime机制,在网上找到的资料大概就是怎么去用这些东西,以及查看runtime.h头文件中的实现,当然这确实是一种很好的学习方法,但是,其实我们还是不会知道r ...
- FZU 2141 Sub-Bipartite Graph
Sub-Bipartite Graph Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u ...
- Printing Array elements with Comma delimiters
https://www.codewars.com/kata/printing-array-elements-with-comma-delimiters/train/csharp using Syste ...
- 卡尔曼滤波— Constant Velocity Model
假设你开车进入隧道,GPS信号丢失,现在我们要确定汽车在隧道内的位置.汽车的绝对速度可以通过车轮转速计算得到,汽车朝向可以通过yaw rate sensor(A yaw-rate sensor is ...
- [SAP ABAP开发技术总结]反射,动态创建内表、结构、变量
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- Python入门-引号
Python 接收单引号(' ),双引号(" ),三引号(''' """) 来表示字符串,引号的开始与结束必须的相同类型的. 其中三引号可以由多行组成,编写多行 ...
- Installing Python 3.5.2 from source
Here are the procedures we are to follow, Download the source code of an official Python release. Co ...
- How to crack interviews ...
Code practice: Leetcode: www.leetcode.com HackerRank: www.hackerrank.com Topcoder: https://www.topco ...
- T-SQL排名函数
提到排名函数我们首先可能想到的是order by,这个是排序,不是排名,排名需要在前面加个名次序号的,order by是没有这个功能的.还可能会想到identity(1,1),它也给了一个序号,但是不 ...
- Scrum Meeting---Eight(2015-11-3)
今日已完成任务和明日要做的任务 姓名 今日已完成任务 今日时间 明日计划完成任务 估计用时 董元财 数据库与客户端通讯 5h 服务器与客户端通讯测试 4h 胡亚坤 好友添加 2h 好友添加 2h 刘猛 ...