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+Wordpress制作小说站
Apr 14 Python
Python实现简单过滤文本段的方法
May 24 Python
python中利用队列asyncio.Queue进行通讯详解
Sep 10 Python
Python Nose框架编写测试用例方法
Oct 26 Python
python实现数据预处理之填充缺失值的示例
Dec 22 Python
python使用xpath中遇到:到底是什么?
Jan 04 Python
python列表,字典,元组简单用法示例
Jul 11 Python
简单了解python反射机制的一些知识
Jul 13 Python
Python模块相关知识点小结
Mar 09 Python
python中怎么表示空值
Jun 19 Python
python之pygame模块实现飞机大战完整代码
Nov 29 Python
Python与C++中梯度方向直方图的实现
Mar 17 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
php 目录遍历、删除 函数的使用介绍
2013/04/28 PHP
php实现文章置顶功能的方法
2016/10/20 PHP
iis6手工创建网站后无法运行php脚本的解决方法
2017/06/08 PHP
php使用scandir()函数扫描指定目录下所有文件示例
2019/06/08 PHP
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
parseInt parseFloat js字符串转换数字
2010/08/01 Javascript
javascript验证上传文件的类型限制必须为某些格式
2013/11/14 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
2014/06/09 Javascript
Node.js与PHP、Python的字符处理性能对比
2014/07/06 Javascript
AngularJS入门知识之MVW类框架的编程思想探讨
2014/12/08 Javascript
jQuery中:enabled选择器用法实例
2015/01/04 Javascript
BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击)
2016/08/18 Javascript
Angular中使用$watch监听object属性值的变化(详解)
2017/04/24 Javascript
JS利用正则表达式实现简单的密码强弱判断实例
2017/06/16 Javascript
nodejs接入阿里大鱼短信验证码的方法
2017/07/10 NodeJs
使用OPENLAYERS3实现点选的方法
2020/09/24 Javascript
微信禁止下拉查看URL的处理方法
2017/09/28 Javascript
AngularJS实现的锚点楼层跳转功能示例
2018/01/02 Javascript
Next.js实现react服务器端渲染的方法示例
2019/01/06 Javascript
javascript数组去重方法总结(推荐)
2019/03/20 Javascript
vue路由守卫及路由守卫无限循环问题详析
2019/09/05 Javascript
layui实现下拉复选功能的例子(包括数据的回显与上传)
2019/09/24 Javascript
JavaScript事件冒泡机制原理实例解析
2020/01/14 Javascript
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
[03:03]DOTA2 2017国际邀请赛开幕战队入场仪式
2017/08/09 DOTA
python连接MySQL数据库实例分析
2015/05/12 Python
Python实现GUI学生信息管理系统
2020/04/05 Python
Python3内置模块random随机方法小结
2019/07/13 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
2019/11/15 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
2020/04/13 Python
python实现小程序推送页面收录脚本
2020/04/20 Python
写一个用矩形法求定积分的通用函数
2012/11/08 面试题
社区个人对照检查材料(群众路线)
2014/09/26 职场文书
工作作风懒散检讨书
2014/10/29 职场文书
2014年工程工作总结
2014/11/25 职场文书
Java中的随机数Random
2022/03/17 Java/Android