23种设计模式之(十四)命令模式(python_c++实现)

Python 中最简最好的设计模式 作为这么一门有前途也有钱途的语言,还有什么理由不去学习和掌握呢? 阅读详情

23种设计模式之(十四)命令模式(Command)

本文主要介绍23种设计模式之命令模式,附详细python/c++示例代码。
- 概念
- 应用场景
- 注意事项
- 代码示例
- 总结
- 代码链接


命令模式(Command)

概念

命令模式是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。

在面向对象的程序设计中,一个对象调用另一个对象,一般情况下的调用过程是,创建目标对象实例,设置调用参数,调用目标对象的方法。但在有些情况下有必要使用一个专门的类对这种调用过程加以封装,我们把这种专门的类称作command类,整个调用过程比较繁杂,或者存在多处这种调用。这时,使用Command类对该调用加以封装,便于功能的再利用。

GoF对命令模式的定义是:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。

应用场景

(1)、认为是命令的地方都可以使用命令模式,比如GUI 中每一个按钮都是一条命令。

( 2)、模拟 CMD。

代码示例

C++代码示例

/************************************************************************/
/* 设计模式专题
/*
/* 命令模式
/*
/* Author  : zzl
/*
/* 编程环境: window10 vs2010
/*
/* Date    : 20180917
/************************************************************************/

#include <iostream>
#include "list"

class Doctor
{
public:
    void treat_eye()
    {
        printf("treat eye \n");
    }

    void treat_nose()
    {
        printf("treat nose \n");
    }
};

class Command
{
public:
    virtual void treat() = 0;
};
class CommandTreatEye : public Command
{
public:
    CommandTreatEye(Doctor *doctor)
    {
        m_doctor = doctor;
    }
    void treat()
    {
        m_doctor->treat_eye();
    }
private:
    Doctor *m_doctor;
};


class CommandTreatNose : public Command
{
public:
    CommandTreatNose(Doctor *doctor)
    {
        m_doctor = doctor;
    }
    void treat()
    {
        m_doctor->treat_nose();
    }
private:
    Doctor *m_doctor;
};


class BeautyNurse
{
public:
    BeautyNurse(Command *command)
    {
        this->command = command;
    }
public:
    void SubmittedCase() //提交病例 下单命令
    {
        command->treat();
    }
protected:
private:
    Command *command;
};

//护士长
class HeadNurse 
{
public:
    HeadNurse()
    {
        m_list.clear();
    }

public:
    void setCommand(Command *command)
    {
        m_list.push_back(command);
    }
    void SubmittedCase() //提交病例 下单命令
    {
        for (std::list<Command *>::iterator it=m_list.begin(); it!=m_list.end(); it++)
        {
            (*it)->treat();
        }
    }
private:
    std::list<Command *> m_list;
};

void main()
{

    //护士提交简历 给以上看病
    HeadNurse       *headnurse = NULL;
    Doctor          *doctor = NULL;
    Command         *command1  = NULL;
    Command         *command2  = NULL;

    doctor = new Doctor ;

    command1 = new CommandTreatEye(doctor); 
    command2 = new CommandTreatNose(doctor); 

    headnurse = new HeadNurse(); //new 护士长
    headnurse->setCommand(command1);
    headnurse->setCommand(command2);

    headnurse->SubmittedCase(); // 护士长 批量下单命令

    delete doctor;
    delete command1;
    delete command2;
    delete headnurse;

}

python代码示例

# -*- coding: utf-8 -*-
###################################################################
# 设计模式专题
# 
# 命令模式
# 
# Author  : zzl
# 
# 编程环境: window10 python2.7
# 
# Date    : 20180917
##################################################################

class Doctor(object):

    def treat_eye(self):
        print("treat eye")

    def treat_nose(self):
        print("treat nose")


class Command(object):
    def treat(self):
        pass


class CommandTreatEye(Command):

    def __init__(self, doctor):
        self.m_doctor = doctor

    def treat(self):
        self.m_doctor.treat_eye()


class CommandTreatNose(Command):
    def __init__(self, doctor):
        self.m_doctor = doctor

    def treat(self):
        self.m_doctor.treat_nose()


class BeautyNurse(object):
    def __init__(self, command):
        self.m_command = command

    def submitted_case(self):
        self.m_command.treat()


class HeadNurse(object):
    def __init__(self):
        self.m_list = []

    def add_command(self, command):
        self.m_list.append(command)

    def submitted_case(self):
        for command in self.m_list:
            command.treat()


if __name__ == "__main__":
    # 护士提交简历给医生看病

    doctor = Doctor()
    command1 = CommandTreatEye(doctor)
    command2 = CommandTreatNose(doctor)

    head_nurse = HeadNurse()

    head_nurse.add_command(command1)
    head_nurse.add_command(command2)

    head_nurse.submitted_case()

源码链接

设计模式(十四)命令模式示例代码(python–c++)

Python设计模式:从代码复用到系统架构的实践指南 设计模式不是银弹,而是帮助我们写出更清晰、更易维护代码的工具。在Python世界中,应充分发挥语言特性,避免生搬硬套。好的设计模式实现应该像“隐形”的基础设施——存在却不引人注意,默默支撑着系统的稳定运行。 阅读详情

相关推荐

旋转矩阵推导

推导前提: 坐标使用右手坐标系,角度逆时针旋转为正。 绕X轴旋转角度为 俯仰角 即Pitch 绕Y轴旋转角度为 偏航角 即Yaw(Head) 绕Z轴旋转角度为 翻滚角 即Roll 一、平面二维坐标点的旋转 如右图所示,根据三角函数关系,可以列出向量OP与OP’的坐标表示形式: x = |OP|•cosα x′ = |OP|•cos(α+β) y = |OP|•sinα y′ = |OP|•sin(α+β) 将P′(x′,y′)表达式展开: x′ =

suixinger_lmh的随笔 1384

23种设计模式之python实现--总结

说的写总结,结果因为找实习,搬家拖了半个多月,不过也没关系了,就是自己写给自己看的,到以后想看的时候翻出来看一看,也算是一种怀念。 先说说python吧,人们都说C/C++程序员相对来说python比较熟悉,我的感觉也是,感觉如果有C基础,加上C++的面向对象的理解,很快的就能变成一个pyer。当然任何一种语言,只要是比较成熟的语言都可以互相实现另一种语言的功能。但是如果做一个系统一般都要几种语

天恒の永恒 3578

因果推断(二):因果推断涉及的ITE、ATE、CATE等效应

因果效应也称为**处理效应(Treatment effect)**是用于评判干预与否的结果差异的指标(处理变量对结果变量的影响)。比如在接受治疗组中,如果这些人不接受治疗,这组人接受治疗和不接受治疗的效应差异是多少。定义为实验组中每个个体的处理效应差异,比如一个个体在接收治疗和不接受治疗的两个处理方式的健康程度得分的差。但是一个人因为不可能。比如我们想探究接受治疗的男性用户和不接受治疗的男性用户的平均效果差异就是CATE。前面说ITE是无法观测的,是因为一个人不能同时接受治疗又不接受治疗,这里关键的就是。

Y1n的博客 3712

23种设计模式教程目录

本教程系统性地介绍GoF(Gang of Four)提出的23种经典设计模式,从基础理论到实际应用,构建完整的设计模式知识体系。教程面向软件开发人员、架构师和计算机专业学生,通过理论讲解、代码实现、UML图解和实战案例,帮助读者深入理解和熟练运用设计模式。适用人群:学习收益:掌握设计模式基础理论,理解面向对象设计原则学习三大类设计模式,通过代码实践加深理解掌握复杂模式的应用场景和组合使用能够在实际项目中灵活运用设计模式解决复杂问题建议学习节奏:

wyl703的博客 993

开源数显表

开源数显表,广泛应用于车床、铣床、磨床、镗床、火花机、线切割等。市面上此类液晶数显表多数都是基于此项目。 一、基本配置 硬件 主控:STM32F407VGT6 LCD:群创AT070TN92 显示驱动:RA8875 光栅尺:3 x 输入(X/Y/Z) 串口:1 x MAX3232 继电器:2 x 输出 存储:AT24C64 模拟输入:LM324C 电源:AC 220V 软件 工程版本:Keil 5 STM32库:V1.4.0 图形界面:uCGUI 多语言支持:中文、英文 二、项目文

m0_70934529的博客 435

【对比学习+分割】CRIS:CLIP驱动RIS图像分割(CVPR 2022)

CRIS: CLIP-Driven Referring Image Segmentation

这个博客太懒了什么都没说 3324

23种设计模式python,23种设计模式之python实现--visitor模式

这个模式涉及到双分派,一直没有好好理解,加上前几天参加面试把最后一个设计模式搁了下来,这次重新看设计模式好好理解了一下,在C++中关于双分派可以参考http://my.oschina.net/coolwater/blog/27676,不过他举的例子有点复杂,简单一点就是:#includeusing namespace std;class A{};class B:public A{};class C...

weixin_39530839的博客 230

从零构建腾讯滑块验证码破解引擎:逆向工程与实战对抗

本文深入解析腾讯滑块验证码(原天御验证码)的防护机制,包括环境感知层、行为分析层和验证决策层的核心技术。通过JSVMP虚拟机保护、轨迹验证算法和动态加密体系,腾讯验证码实现了高效的人机识别。文章还提供了安全研究实践指南,涵盖环境模拟和验证码识别方案,并探讨了防御对抗的演进趋势与合规研究建议。

rl6adventurer的博客 827

23种设计模式精讲,配套23道编程题目 ,支持 C++、Java、Python、Go

学习设计模式,这次稳了

代码随想录 1416

反序列化漏洞详解

目录 一、什么是序列化和反序列化 二、什么是反序列化漏洞 三、序列化函数(serialize) 四、反序列化(unserialize) ​五、什么是PHP魔术方法 六、一些常见的魔术方法 七、魔术方法的利用 八、反序列化漏洞的利用 1.__destruct()函数 2.__wakeup() 3.toString() ​九、反序列化漏洞的防御 一、什么是序列化和反序列化 序列化是将对象转换为字符串以便存储传输的一种方式。而反序列化恰好就是序列化的逆过程,反序列化会将字符串.

LJH1999ZN的博客 3万+

新疆地形数据下载:30米、12.5米、5米DEM地形数据

新疆是我国陆地面积最大的省级行政区,总面积达166万平方公里。新疆的地形也十分的复杂,新疆的地形呈山脉与盆地相间排列,盆地被高山环抱,,俗称“三山夹两盆”。三山指阿尔泰山、昆仑山、天山,两盆是指塔里木盆地和准噶尔盆地。 对精度要求不高的话,可以直接使用图新地球下载 新疆30米地形数据 大小:9.26GB 来自ASTER v3的新疆30米地形数据 30米地形数据下载 新疆12.5米地形数据 12.5米DEM数据由于精度比较高,一般不会用到全省的数据,通常用的是一个地区的,因此,可以单独分

LocaSpace的博客 3495

23种设计模式之python实现--visitor模式

http://my.oschina.net/coolwater/blog/27676

天恒の永恒 1990

故障处理:Oracle一体机磁盘故障时磁盘组重平衡失败的故障处理

摘要: Oracle Exadata一体机出现磁盘故障案例,存储节点故障灯未亮但磁盘已产生大量坏块,导致重平衡失败。文章强调了一体机硬件巡检需检查6个关键维度:节点messages日志、存储cell告警日志、CellCLI日志、ASM告警日志、ILOM日志及服务器信号灯。故障分析显示硬盘物理故障导致磁盘组冗余受损,自动修复流程受阻。文中详细记录了通过CellCLI工具排查损坏磁盘的过程,并提供了完整的故障处理流程和命令输出。文章同步发布于微信公众号"IT民工的龙马人生"和博客网站(www

提供数据库技术支持(系统优化,故障处理,安装升级,数据恢复等) 1231

c++ h cpp文件如何关联_C++核心准则SF.5: .cpp文件必须包含定义它接口的.h文件

SF.5: A.cppfile must include the.hfile(s) that defines its interfaceSF.5: .cpp文件必须包含定义它接口的.h文件Reason(原因)This enables the compiler to do an early consistency check.这样可以让编译器尽早进行一致性检查。Example, b...

weixin_39779537的博客 137

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【23种设计模式】模式背后运用的技术对照

本文详细介绍了软件设计中的三大类设计模式:结构型模式、创建型模式和行为型模式。结构型模式包括适配器、桥接、组合、装饰器、外观、享元和代理模式,用于处理类或对象之间的组合关系。创建型模式涵盖单例、工厂方法、抽象工厂、建造者和原型模式,专注于对象的创建机制。行为型模式涉及策略、模板方法、观察者、迭代器、责任链、命令、备忘录和状态模式,主要处理对象之间的职责分配和通信。每种模式都提供了技术要点和相关技术的应用示例,帮助开发者理解和应用这些设计模式以构建灵活、可维护的软件系统。

键盘爱好者 1368

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

23种设计模式之(六)代理模式(python_c++实现)

23种设计模式之(六)代理模式(Proxy) 本文主要介绍23种设计模式之原型模式,附详细python/c++示例代码。 - 概念 - 应用场景 - 注意事项 - 代码示例 - 总结 - 代码链接 代理模式(Proxy) 概念 代理模式是构造型的设计模式之一,它可以为其他对象提供一种代理以控制对这个对象的访问,所谓代理,是指具有与代理元(被代理的对象)具有相同的接口...

zzl_python的博客 627

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

第十章 使用一等函数实现设计模式

是否符合模式并不是衡量好坏的标准。 ----Ralph Johnson,Coauthor of the Design Patterns classic 在软件工程中,设计模式是解决常见设计问题的通用方法。你不需要知道设计模式来学习本章。我将解释示例中使用的模式。 设计模式在编程中的使用由具有里程碑意义的书籍Design Patterns: Elements of Reusable Obj...

m0_57581736的博客 254

23种设计模式之(四)建造者模式(python_c++实现)

23种设计模式之(四)建造者模式 本文主要介绍23种设计模式之建造者模式,附详细python/c++示例代码。 - 概念 - 应用场景 - 注意事项 - 代码示例 - 总结 - 代码链接 建造者模式 概念 建造者模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。 建造者...

zzl_python的博客 775

大话设计模式_设计模式Python版系列介绍:1、设计模式简介、类型、原则

今天开始准备写一个设计模式系列的Python版本,网上有很多Java、C++版本的,Python版本的相对来说比较零散,从今天开始,我会系统的介绍每个设计模式的Python实现。首先介绍一下什么是设计模式(Design Pattern):一句话解释一下:设计模式是面向对象编程时,如何定义类与类、类与对象、类与方法的各种组合方式的经验实践,都是前人的经验!通过在合适的场景下,选择合适的设计模式,对我...

weixin_39681644的博客 121

Leetcode——C++突击面试

C++突击面试1. 编译内存相关1.1. C++ 程序编译过程1.2. C++ 内存管理1.3. 栈和堆的区别1.4. 变量的区别1.5. 全局变量定义在头文件中有什么问题?1.6. 内存对齐1.7. 什么是内存泄露1.8. 怎么防止内存泄漏?内存泄漏检测工具的原理?2. 语言对比3. 面向对象4. 关键字库函数5. 类相关6. 语言特性相关7. 设计模式 1. 编译内存相关 1.1. C++ 程序编译过程 编译过程分为四个过程:编译(编译预处理、编译、优化),汇编,链接。 编译预处理:处理以 # 开头

Stephen 2万+

23种设计模式之(十二)享元模式(python_c++实现)

23种设计模式之(十二)享元模式(Flyweight) 本文主要介绍23种设计模式之享元模式,附详细python/c++示例代码。 - 概念 - 应用场景 - 注意事项 - 代码示例 - 总结 - 代码链接 享元模式(Flyweight) 概念 享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改...

zzl_python的博客 201

23种设计模式之(十三)模板模式(python_c++实现)

23种设计模式之(十三)模板模式(TemplateMethod) 本文主要介绍23种设计模式之模板模式,附详细python/c++示例代码。 - 概念 - 应用场景 - 注意事项 - 代码示例 - 总结 - 代码链接 模板模式(TemplateMethod) 概念 模板模式,是行为模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法...

zzl_python的博客 301

23种设计模式之(二十)访问者模式(python_c++实现)

23种设计模式之(二十)访问者模式(Visitor) 本文主要介绍23种设计模式之访问者模式,附详细python/c++示例代码。 概念 应用场景 注意事项 代码示例 总结 代码链接 访问者模式(Visitor) 概念 在访问者模式(Visitor)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根...

zzl_python的博客 492

python实践_python实践设计模式

学习python有一段时间,之前就是看看书,最后发现只有实践才能真正学到东西,只有在解决问题中才能真正掌握。之前大牛也有用python实现各种设计模式的,我自己参考之前在学习用C#实现设计模式的经历,也想把23种模式逐一实践,从网上查了一些资料,才明白python虽然是面向对象的,但是和C#,java语言不太一样。影响设计方法不一样有以下几点:1.python没有接口Interface的类型。2....

weixin_39970994的博客 201

为什么Python不用设计模式?

来自:码农翻身(微信号:coderising) 在遥远的Python王国,有一位少年,非常热爱编程,他的父母想给他报一个班,问了万能的朋友圈以后,发现大家都推荐同一个老师,人称吉先生。 于是他的父母毫不犹豫就交了一笔不菲的学费,每周六日下午让孩子去学习。 少年学习非常刻苦,很快就学会了Python语法、工具和框架。 老师像是见到了可以雕刻的美玉, 倾囊相授,告诉他不仅要把代码写对...

勇往直前的专栏 5036

Python语言与设计模式

设计模式是一个抽象层次,描述了在一个特定的环境中用来解决一般设计问题的对象和类之间的交互关系,其主要目的是充分利用语言的特性,设计可复用 的、能够适应需求变更的软件[9]。设计模式是一种设计思想,语言是实现思想的工具。因此,不同语言的特性影响了设计模式的实现,有些语言更容易实现设计 模式,而有些语言则比较难。GoF在设计模式一书中选用了两种面向对象语言—C++和Smalltalk实现软件开发中常...

weixin_34122810的博客 144
上一篇: 23种设计模式之(十三)模板模式(python_c++实现)
下一篇: 23种设计模式之(十五)责任链模式(python_c++实现)
zzl_python
博客等级 码龄8年 21粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值