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 相关文章推荐
Python3.x和Python2.x的区别介绍
Feb 12 Python
使用IPython来操作Docker容器的入门指引
Apr 08 Python
python从入门到精通(DAY 1)
Dec 20 Python
实例解析Python设计模式编程之桥接模式的运用
Mar 02 Python
Python抓取框架 Scrapy的架构
Aug 12 Python
Python FTP两个文件夹间的同步实例代码
May 25 Python
python批量修改图片大小的方法
Jul 24 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
Feb 28 Python
python做反被爬保护的方法
Jul 01 Python
django filter过滤器实现显示某个类型指定字段不同值方式
Jul 16 Python
python反爬虫方法的优缺点分析
Nov 25 Python
Flask中jinja2的继承实现方法及实例
Mar 03 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 闭包特性在实际应用中的问题
2009/10/30 PHP
在VS2008中编译MYSQL5.1.48的方法
2010/07/03 PHP
php使用指定字符列表生成随机字符串的方法
2015/04/18 PHP
PHP面试题之文件目录操作
2015/10/15 PHP
Fleaphp常见函数功能与用法示例
2016/11/15 PHP
ASP中用Join和Array,可以加快字符连接速度的代码
2007/08/22 Javascript
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
Jjcarousellite 实现图片列表滚动的简单实例
2013/11/29 Javascript
jquery实现人性化的有选择性禁用鼠标右键
2014/06/30 Javascript
node.js中的http.request.end方法使用说明
2014/12/10 Javascript
jquery中实现时间戳与日期相互转换
2016/04/12 Javascript
第九章之路径分页标签与徽章组件
2016/04/25 Javascript
js两种拼接字符串的简单方法(必看)
2016/09/02 Javascript
Javascript之深入浅出prototype
2017/02/06 Javascript
Vue触发式全局组件构建的方法
2018/11/28 Javascript
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
2019/07/19 Javascript
微信小程序绑定手机号获取验证码功能
2019/10/22 Javascript
[04:16]DOTA2英雄梦之声_第09期_斧王
2014/06/21 DOTA
[14:25]教你分分钟做大人:主宰(HEROS)
2014/12/08 DOTA
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
[01:08:17]2018DOTA2亚洲邀请赛3月29日 小组赛B组 EG VS VGJ.T
2018/03/30 DOTA
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
Python实现matplotlib显示中文的方法详解
2018/02/06 Python
python实现拓扑排序的基本教程
2018/03/11 Python
python3.x实现base64加密和解密
2019/03/28 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
matplotlib.pyplot画图并导出保存的实例
2019/12/07 Python
Python Sphinx使用实例及问题解决
2020/01/17 Python
django queryset 去重 .distinct()说明
2020/05/19 Python
简单掌握CSS3将文字描边及填充文字颜色的方法
2016/03/07 HTML / CSS
美特斯邦威官方商城:邦购网
2016/10/13 全球购物
法国家具及室内配件店:home24
2017/01/21 全球购物
办公室主任岗位职责
2013/11/08 职场文书
2015年幼儿园毕业感言
2014/02/12 职场文书
英文感谢信格式
2015/01/21 职场文书
如何理解及使用Python闭包
2021/06/01 Python