1. 命令模式(Command)介绍

UML类图

角色介绍

  • Command类:是一个抽象类,类中对需要执行的命令进行声明,一般来说要对外公布一个execute方法用来执行命令。
  • ConcreteCommand类:Command类的实现类,对抽象类中声明的方法进行实现。
  • Client类:最终的客户端调用类。
  • Invoker类:调用者,负责调用命令。
  • Receiver类:接收者,负责接收命令并且执行命令。

2. 示例

  • 顾名思义,命令模式就是对命令的封装。所谓对命令的封装,说白了,无非就是把一系列的操作写到一个方法中,然后供客户端调用就行了,反映到类图上,只需要一个ConcreteCommand类和Client类就可以完成对命令的封装,即使再进一步,为了增加灵活性,可以再增加一个Command类进行适当地抽象,这个调用者和接收者到底是什么作用呢?
  • 其实大家可以换一个角度去想:假如仅仅是简单地把一些操作封装起来作为一条命令供别人调用,怎么能称为一种模式呢?命令模式作为一种行为类模式,首先要做到低耦合,耦合度低了才能提高灵活性,而加入调用者和接收者两个角色的目的也正是为此。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-'''Command Pattern with Python Code
'''from abc import abstractmethod, ABCMeta# Command抽象类,类中对需要执行的命令进行声明,一般来说要对外公布一个execute方法用来执行命令
class Command(metaclass=ABCMeta):@abstractmethoddef execute(self):pass# 接收者,负责接收命令并且执行命令
class Receiver(object):def do_enter(self):print("Receive a command")# 调用者,负责调用命令
class Invoker(object):def set_command(self, command):self._command = commanddef action(self):self._command.execute()# Command类的实现类
class ConcreteCommand(Command):def __init__(self, receiver):self._receiver = receiverdef execute(self):self._receiver.do_enter()# 最终的客户端调用类
class Client(object):def main(self, args=None):receiver = Receiver()command = ConcreteCommand(receiver)# 客户端直接执行具体命令方式command.execute()# 客户端通过调用者来执行命令invoker = Invoker()invoker.set_command(command)invoker.action()if __name__ == "__main__":Client().main()

输出:

# ./Command.py
Receive a command
Receive a command

参考:
https://yq.aliyun.com/articles/71070?spm=a2c4e.11155435.0.0.707a38daJdxBwQ
https://wiki.jikexueyuan.com/project/java-design-pattern/command-pattern.html

python设计模式14-命令模式相关推荐

  1. 经典的设计模式14——命令模式

    文章目录 命令模式 命令模式 定义:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开,这样两者之间通过命令对象进行沟通,这样方便将命令对象进行存储.传递.调用.增加与管理. 结构: 抽 ...

  2. 设计模式 之 命令模式

    2019独角兽企业重金招聘Python工程师标准>>> 设计模式 之 命令模式 命令模式比较简单,不过多赘述 为什么需要命令模式 将"行为请求者"与"行 ...

  3. Python设计模式-装饰器模式

    Python设计模式-装饰器模式 代码基于3.5.2,代码如下; #coding:utf-8 #装饰器模式class Beverage():name = ""price = 0.0 ...

  4. Python设计模式-中介者模式

    Python设计模式-中介者模式 代码基于3.5.2,代码如下; #coding:utf-8 #中介者模式class colleague():mediator = Nonedef __init__(s ...

  5. Python设计模式-职责链模式

    Python设计模式-职责链模式 代码基于3.5.2,代码如下; #coding:utf-8 #职责链模式class Handler():def __init__(self):self.success ...

  6. Python设计模式-享元模式

    Python设计模式-享元模式 基于Python3.5.2,代码如下 #coding:utf-8class Coffee:name = ""price = 0def __init_ ...

  7. python的编程模式-Python设计模式之状态模式原理与用法详解

    本文实例讲述了Python设计模式之状态模式原理与用法.分享给大家供大家参考,具体如下: 状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 ...

  8. python策略模式包含角色_详解Python设计模式之策略模式

    虽然设计模式与语言无关,但这并不意味着每一个模式都能在每一门语言中使用.<设计模式:可复用面向对象软件的基础>一书中有 23 个模式,其中有 16 个在动态语言中"不见了,或者简 ...

  9. 乐在其中设计模式(C#) - 命令模式(Command Pattern)

    原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...

  10. python设计模式之建造者模式

    python设计模式之建造者模式 ​ 建造者模式的适用范围:想要创建一个由多个部分组成的对象,而且它的构成需要一步接一步的完成.只有当各个部分都完成了,这个对象才完整.建造者模式表现为复杂对象的创建与 ...

最新文章

  1. 人员梯度培养_关键人才的梯队培养
  2. Linux(9.21-9.27)学习笔记
  3. docker卸载命令_Docker入门篇
  4. java批处理 异常处理_Java批处理教程
  5. UI网格,提升效率,爱上做设计
  6. 使用Aircrack-ng和RT3070无线网卡破解WIFI密码
  7. 数据大屏产品介绍PPT_【达索系统】 Ortems APS产品介绍 PPT
  8. 从MOSSE到KCF,再从KCF到C-COT,再从C-COT到ECO梳理
  9. 简单制作 macOS Sierra 正式版U盘USB启动安装盘方法教程 (全新安装 Mac 系统)
  10. 康托尔点集matlab实数,康托尔(Cantor)是如何证明实数集是不可数的
  11. 一个SAP开发人员的双截棍之路
  12. 小布助手对话短文本语义匹配
  13. 用 IntelliJ IDEA来创建的java web工程,工程的子模块右下角没有蓝色小方块的解决办法
  14. win10系统装服务器2008蓝屏,win10蓝屏 重装系统还是蓝屏
  15. kesu移动硬盘(固态硬盘)插上电脑后不显示盘符的解决办法
  16. MIT周博磊:CV本质上是一门科学研究
  17. ppt中如何插入页码(如何从第二页插入页码?)
  18. matlab曲线拟合工具箱 cftool
  19. 【数据结构与算法】之深入解析“航班预订统计”的求解思路与算法示例
  20. 160个CrackMe 028 Cosh.2

热门文章

  1. MySQL 函数 —— GROUP_CONCAT
  2. 二度云抢先成为首批中国工信部(.vip/.xyz/.club)域名注册管理机构
  3. DNS(BIND) 正向解析   反向解析 基本服务的搭建
  4. DOM(二)使用DOM
  5. Linux apache编译安装
  6. STL~Deque简介
  7. json和gson的一些区别
  8. JavaScript之eval() 函数
  9. MESI--CPU缓存一致性协议
  10. 无浮动IP的虚机出公网流量路径