Python设计模式之命令模式原理与用法实例分析


Posted in Python onJanuary 11, 2019

本文实例讲述了Python设计模式之命令模式原理与用法。分享给大家供大家参考,具体如下:

命令模式(Command Pattern):将请求封装成对象,从而使可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作.

下面是一个命令模式的demo:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
"""
大话设计模式
设计模式——命令模式
命令模式(Command Pattern):将请求封装成对象,从而使可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作.
"""
# 命令类
class Command(object):
  def __init__(self, receiver):
    self.receiver = receiver
  def execute(self):
    pass
# 执行接收者的操作
class ConcreteCommand(Command):
  def execute(self):
    self.receiver.action()
# 接收命令
class Invoker(object):
  def __init__(self):
    self.command = ''
  def setcommand(self,command):
    self.command = command
  def excutecommand(self):
    self.command.execute()
# 具体执行类
class Receiver(object):
  def action(self):
    print "执行请求"
if __name__ == "__main__":
  r = Receiver() #创建需要执行的命令
  c = ConcreteCommand(r) # 绑定要执行的命令
  i = Invoker() # 创建命令执行者
  i.setcommand(c) # 接受命令
  i.excutecommand() # 执行命令

上面类的设计如下图:

Python设计模式之命令模式原理与用法实例分析

优点:

可以较容易的设计一个命令队列

可以较容易的将命令记入日志

允许接收请求的一方决定是否要否决请求

可以容易的实现对请求的撤销和重做

加进新的具体命令类不影响其他的类,因此增加新的具体命令类很容易

命令模式最大的优点是 把请求一个操作的对象与知道怎么执行一个操作的对象分割开

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python日期操作学习笔记
Oct 07 Python
Python 实现一个颜色色值转换的小工具
Dec 06 Python
python 用正则表达式筛选文本信息的实例
Jun 05 Python
python多线程抽象编程模型详解
Mar 20 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
Apr 29 Python
python使用pandas处理大数据节省内存技巧(推荐)
May 05 Python
python二进制文件的转译详解
Jul 03 Python
Python 给定的经纬度标注在地图上的实现方法
Jul 05 Python
python实现字典嵌套列表取值
Dec 16 Python
flask框架url与重定向操作实例详解
Jan 25 Python
完美解决Pycharm中matplotlib画图中文乱码问题
Jan 11 Python
深度学习tensorflow基础mnist
Apr 14 Python
Python设计模式之职责链模式原理与用法实例分析
Jan 11 #Python
对Python中实现两个数的值交换的集中方法详解
Jan 11 #Python
对Python模块导入时全局变量__all__的作用详解
Jan 11 #Python
Python实现批量执行同目录下的py文件方法
Jan 11 #Python
python多个模块py文件的数据共享实例
Jan 11 #Python
Python设计模式之享元模式原理与用法实例分析
Jan 11 #Python
详解从Django Rest Framework响应中删除空字段
Jan 11 #Python
You might like
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
2013/04/08 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
2016/09/02 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
2017/07/27 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
jQuery开发者都需要知道的5个小技巧
2010/01/08 Javascript
前端开发的开始---基于面向对象的Ajax类
2010/09/17 Javascript
拖动布局之保存布局页面cookies篇
2010/10/29 Javascript
js对列表中第一个值处理与jsp页面对列表中第一个值处理的区别详解
2013/11/05 Javascript
深入理解javascript中return的作用
2013/12/30 Javascript
在css加载完毕后自动判断页面是否加入css或js文件
2014/09/10 Javascript
js表单中选择框值的获取及表单的序列化
2015/12/17 Javascript
javascript设计模式之module(模块)模式
2016/08/19 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
js jquery 获取某一元素到浏览器顶端的距离实现方法
2018/09/05 jQuery
vue+iview 兼容IE11浏览器的实现方法
2019/01/07 Javascript
解决微信小程序中的滚动穿透问题
2019/09/16 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
2020/01/16 Javascript
[16:27]DOTA2 HEROS教学视频教你分分钟做大人-艾欧
2014/06/11 DOTA
[49:08]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
实例讲解Python中函数的调用与定义
2016/03/14 Python
Python对文件操作知识汇总
2016/05/15 Python
Python 最强编辑器详细使用指南(PyCharm )
2019/09/16 Python
Python如何计算语句执行时间
2019/11/22 Python
Python3爬虫中Ajax的用法
2020/07/10 Python
python图片合成的示例
2020/11/09 Python
CSS3自定义滚动条样式 ::webkit-scrollbar的示例代码详解
2020/06/01 HTML / CSS
英国二手物品交易网站:Preloved
2017/10/06 全球购物
加拿大折扣、优惠券和交易网站:WagJag
2018/02/07 全球购物
惊艳的手工时装首饰:Migonne Gavigan
2018/02/23 全球购物
求最大连续递增数字串(如"ads3sl456789DF3456ld345AA"中的"456789")
2015/09/11 面试题
护理专业应届毕业生推荐信
2013/11/15 职场文书
酒店副总经理岗位职责范本
2014/02/04 职场文书
二年级学生评语大全
2014/04/23 职场文书
大班幼儿评语大全
2014/04/30 职场文书
父母教会我观后感
2015/06/17 职场文书
详解Nginx启动失败的几种错误处理
2021/04/01 Servers