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中的迭代器漫谈
Feb 03 Python
Python编程中的for循环语句学习教程
Oct 14 Python
Python序列操作之进阶篇
Dec 08 Python
python爬虫使用cookie登录详解
Dec 27 Python
python网络爬虫学习笔记(1)
Apr 09 Python
Python使用字典实现的简单记事本功能示例
Aug 15 Python
python如何从文件读取数据及解析
Sep 19 Python
python路径的写法及目录的获取方式
Dec 26 Python
MAC平台基于Python Appium环境搭建过程图解
Aug 13 Python
Django使用channels + websocket打造在线聊天室
May 20 Python
我对PyTorch dataloader里的shuffle=True的理解
May 20 Python
Python如何快速找到多个字典中的公共键(key)
Apr 29 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
提问的智慧(2)
2006/10/09 PHP
关于PHP session 存储方式的详细介绍
2013/06/25 PHP
JQuery Tips(2) 关于$()包装集你不知道的
2009/12/14 Javascript
JavaScript 获取当前时间戳的代码
2010/08/05 Javascript
javascript forEach通用循环遍历方法
2010/10/11 Javascript
js Math 对象的方法
2013/09/01 Javascript
改变隐藏的input中value的值代码
2013/12/30 Javascript
Javascript学习笔记之数组的构造函数
2014/11/23 Javascript
javascript中HTMLDOM操作详解
2014/12/11 Javascript
jQuery实现数字加减效果汇总
2014/12/16 Javascript
老生常谈Javascript中的原型和this指针
2016/10/09 Javascript
CSS+jQuery实现简单的折叠菜单
2016/12/20 Javascript
BootStrap CSS全局样式和表格样式源码解析
2017/01/20 Javascript
VueJS如何引入css或者less文件的一些坑
2017/04/25 Javascript
JS实现无缝循环marquee滚动效果
2017/05/22 Javascript
vue自定义过滤器创建和使用方法详解
2017/11/06 Javascript
JavaScript实现的鼠标跟随特效示例【2则实例】
2018/12/22 Javascript
微信小程序仿今日头条导航栏滚动解析
2019/08/20 Javascript
Vue element-ui父组件控制子组件的表单校验操作
2020/07/17 Javascript
openlayers实现地图测距测面
2020/09/25 Javascript
一篇文章看懂JavaScript中的回调
2021/01/05 Javascript
用Python写的图片蜘蛛人代码
2012/08/27 Python
python实现按行分割文件
2019/07/22 Python
简单了解python 生成器 列表推导式 生成器表达式
2019/08/22 Python
Python如何截图保存的三种方法(小结)
2020/09/01 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
2020/09/29 Python
全球酒店比价网:HotelsCombined
2017/06/20 全球购物
枚举与#define宏的区别
2014/04/30 面试题
教育实习生的自我评价分享
2013/11/21 职场文书
黄河的主人教学反思
2014/02/07 职场文书
行政助理工作职责范本
2014/03/04 职场文书
竞选班干部的演讲稿
2014/04/24 职场文书
公司员工离职感言
2015/08/03 职场文书
七年级语文教学反思
2016/03/03 职场文书
七年级之开学家长寄语35句
2019/09/05 职场文书
Python Django获取URL中的数据详解
2021/11/01 Python