设计模式:command模式
目的:将命令设计成类的形式,并可以组织成队列
优点:
- 在需要的情况下,可以比较容易地将命令记入日志
- 可以容易的实现对请求的撤销和重做
- 由于新的具体命令类不影响其他的命令类,因此增加新的具体命令类很容易
例子:
class Receiver
{
public:
void action()
{
cout << "do action." << endl;
}
};
class Icommand
{
public:
virtual void excute() = 0;
}; class CommondFirst: public Icommand
{
Receiver* receive;
public:
CommondFirst(Receiver* receive)
{
this->receive = receive;
} void excute()
{
cout << "CommondFirst: " << endl;
receive->action();
}
}; class CommondSecond: public Icommand
{
Receiver* receive;
public:
CommondSecond(Receiver* receive)
{
this->receive = receive;
} void excute()
{
cout << "CommondSecond: " << endl;
receive->action();
}
};
class Invoker
{
vector<Icommand*> v;
public: void addCommand(Icommand* c)
{
v.push_back(c);
} void clear()
{
v.clear();
} void Notify()
{
for(vector<Icommand*>::iterator it=v.begin(); it!=v.end(); ++it)
{
(*it)->excute();
}
}
};
int main()
{
Receiver* r = new Receiver();
CommondFirst* cf = new CommondFirst(r);
CommondSecond* cs = new CommondSecond(r); Invoker* invoker = new Invoker();
invoker->addCommand(cf);
invoker->addCommand(cs);
invoker->Notify(); return 0;
}
设计模式:command模式的更多相关文章
- java设计模式-Command模式
1.背景: 站在MM的角度,想命令追求者Boy干什么就干什么,而且将来还可以扩展,怎么做? 2.代码: Command.java: package com.cy.dp.command; publi ...
- 开发设计模式(一)Command模式
Command定义 将来自客户端的请求传入一个对象,无需了解这个请求激活的 动作或有关接受这个请求的处理细节. 这是一种两台机器之间通讯联系性质的模式,类似传统过程语 言的 CallBack功能. 优 ...
- 设计模式--命令模式(Command)
基本概念: Command模式也叫命令模式 ,是行为设计模式的一种.Command模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数,命令模式将方法调用给封装起来了. 命令模式的 ...
- Java设计模式(22)命令模式(Command模式)
Command模式是最让我疑惑的一个模式,我在阅读了很多代码后,才感觉隐约掌握其大概原理,我认为理解设计模式最主要是掌握起原理构造,这样才对自己实际编程有指导作用.Command模式实际上不是个很具体 ...
- Command模式(命令设计模式)
Command?? 把方法的调用用一个类的实例来承载,要管理工作的历史记录,创建这些方法执行的命令的集合,只需管理这些实例的集合即可,而且还可以随时再次执行过去的命令,或是将多个过去的命令整合为一个新 ...
- C++设计模式-Command命令模式
Command命令模式作用:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作. 由于“行为请求者”与“行为实现者”的紧耦合,使用命令模式 ...
- 设计模式(二十二)Command模式
一个类在进行工作时会调用自己或者是其他类的方法,虽然调用结果会反映在对象的状态中,但并不会留下工作的历史记录. 这时,如果我们有一个类,用来表示“请进行这项工作”的“命令”就会方便很多.每一项想做的工 ...
- C++设计模式 - 命令模式(Command)
行为变化模式 在组件的构建过程中,组件行为的变化经常导致组件本身剧烈的变化."行为变化" 模式将组件的行为和组件本身进行解耦,从而支持组件行为的变化,实现两者之间的松耦合. 典型模 ...
- C++基础——模拟事务 (1)COMMAND模式
=================================版权声明================================= 版权声明:原创文章 禁止转载 请通过右侧公告中的“联系邮 ...
- [Head First设计模式]餐馆中的设计模式——命令模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
随机推荐
- C语言实现类
#ifndef __DEFINE__H__ #define __DEFINE__H__ #define vector3(type) \ typedef struct vector3_##type { ...
- Cookie的简介与使用
Cookie 历来指就着牛奶一起吃的点心.然而,在因特网内,"Cookie"这个字有了完全不同的意思.那么"Cookie"到底是什么呢?"Cookie ...
- [ APUE ] 第三章 文件系统
1. 文件描述符 打开或创建一个文件时,内核向进程返回一个文件描述符,当读.写一个文件时,用open()或creat()返回的文件描述符标识该文件,将其作为参数传递给write.read. stdin ...
- [ C++ ] 勿在浮沙筑高台 —— 拾遗
explicit 主要用于处理一个参数的构造函数,使其不用于隐式类型转换(防止二义性) operator->() C++设计 ->可以一直保留下去 仿函数 仿函数会隐式继承他们中的一个(详 ...
- spring boot admin项目的集成和开发
Spring Boot Admin是一个Github上的一个开源项目,它在Spring Boot Actuator的基础上提供简洁的可视化WEB UI,是用来管理 Spring Boot 应用程序的一 ...
- 入门大数据---Spark车辆监控项目
一.项目简介 这是一个车辆监控项目.主要实现了三个功能: 1.计算每一个区域车流量最多的前3条道路. 2.计算道路转换率 3.实时统计道路拥堵情况(当前时间,卡口编号,车辆总数,速度总数,平均速度) ...
- python解析json文件信息到csv中
json格式多种多样,本代码着重看函数部分 import json, csv, os import pandas as pd josns_root = 'jsons' csvs_root = 'csv ...
- JavaWeb项目在浏览器点击几次就阻塞了
问题描述 在学习JavaWeb项目时,通过IDE启动项目后,在浏览器点击几次页面中的链接就阻塞了,浏览器一直转圈圈无法加载,后台日志也没有输出. 第一次遇见这种情况,没有日志完全无法分析到底是什么问题 ...
- Laytpl 1.2
https://jeesite.gitee.io/front/laytpl/index.html
- 为什么是link-visited-hover-active原理这样的特殊
前言 通常我们在设置链接的一些伪类(link,visited,hover,active)样式时,要让不同的状态显示正确的样式,我们需要按一定的顺序设置这些伪类的样式.这里我就按css2规范中推荐的顺序 ...