Python设计模式:命令模式(python设置生成命令)
off999 2024-10-27 11:56 40 浏览 0 评论
今日分享主题:Python 设计模式之命令模式。
定义
命令模式是一种行为设计模式,用于封装触发事件(完成任何一个操作)所包含的所有信息。一般有方法名称,拥有方法对象,方法参数等。
命令模式就是对命令的封装。所谓封装命令,就是将一系列操作封装到命令类中,并且命令类只需要对外公开一个执行方法 execute,调用此命令的对象只需要执行命令的 execute 方法就可以完成所有的操作。这样调用此命令的对象就和命令具体操作之间解耦了。
通过命令模式我们可以抽象出调用者,接收者和命令三个对象。调用者就是简单的调用命令,然后将命令发送给接收者,而接收者则接收并执行命令,执行命令的方式也是简单的调用命令的 execute 方法就可以了。发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。
结构组成
- Command: 定义命令的接口类,声明要执行的抽象方法,可以理解为一个基类。
- ConcreteCommand_*: 命令接口实现对象,通常会持有接收者,并调用接收者的功能来完成命令要执行的操作。
- Invoker: 要求命令对象执行请求,通常会持有命令对象,可以持有很多的命令对象,相当于使用命令对象的入口。
- Proxy: 代理的调用者
Python 代码实现
1from abc import abstractmethod,ABC
2class Command(ABC):
3 """声明抽象类,定义抽象方法"""
4 @abstractmethod
5 def execute(self):
6 pass
7
8class ConcreteCommand_start(Command):
9 """实现抽象类的抽象方法"""
10 def __init__(self,obj1):
11 self.obj1=obj1
12
13 def execute(self):
14 self.obj1.start()
15
16
17class ConcreteCommand_show(Command):
18 """实现抽象类的抽象方法"""
19 def __init__(self,obj2):
20 self.obj2=obj2
21
22 def execute(self):
23 self.obj2.show()
24
25class Invoker:
26 """接受命令并执行命令的类"""
27 def start(self):
28 print("command is starting...")
29
30 def show(self):
31 print("command is showing...")
32
33class Proxy:
34 """定义一个代理类"""
35 def __init__(self):
36 self.__queue=[]
37
38 #命令执行方法
39 def execute_cmd(self,cmd):
40 self.__queue.append(cmd)
41 cmd.execute()
42
43if __name__ == '__main__':
44 #实例化可执行命令的类对象
45 test=Invoker()
46 cmd1=ConcreteCommand_start(test)
47 cmd2=ConcreteCommand_show(test)
48 #实例化代理者类对象
49 proxy=Proxy()
50 proxy.execute_cmd(cmd1)
51 proxy.execute_cmd(cmd2)输出结果为:
1command is starting...
2command is showing...总结
命令行模式的优势如下:
- 命令模式的封装性很好,每个命令都被封装起来,对于客户端来说,需要什么功能就去调用相应的命令,而无需知道命令具体是怎么执行的。
- 命令模式的扩展性很好,在命令模式中,在接收者类中一般会对操作进行最基本的封装,命令类则通过对这些基本的操作进行二次封装。
- 当增加新命令的时候,对命令类的编写一般不是从零开始的,有大量的接收者类可供调用,也有大量的命令类可供调用,代码的复用性很好。
相关推荐
- windows7安装版系统下载(win7安装版安装步骤)
-
1、win7系统装完后需要占用C盘空间10-15GB,如果把常用软件也安装到C盘,大小超过20+。 2、在分区的时候根据硬盘大小,如果硬盘相对较小,一般建议设置50G,最低不能低于30G。因...
- 韩剧网(韩剧网韩剧tv最新韩剧免费观看)
-
不收费,终身不收费~连续剧、综艺、歌曲,通通不要钱。之前好像是技术问题,现在恢复了。其它诸如人人视频、圈粉TV也都可以看韩剧哦。韩剧网有搜索页面的呀,搜索一下就可以了,不过好像《制作人》和玄彬的...
- 跳一跳游戏(跳一跳游戏是什么时候出来的)
-
GiveItUP《GiveItUP》是一款由Invictus推出的益智跑酷游戏。游戏与传统的跑酷类游戏最大的区别在于,游戏融入了高难度的节奏性挑战。红色火焰躲避技巧:红色火焰在游戏中是最常见的一个障碍...
- 什么是oa办公系统(办公oa系统的好处)
-
OA是OfficeAutomation的简写,就是办公自动化。所谓OA系统就是用网络和OA软件构建的一个单位内部的办公通信平台,用于辅助办公。OA系统完成单位内部的邮件通信、信息发布、文档管理、工作...
- 手机万能mp4转换器(手机万能mp4转换器下载)
-
1你需要先下载并安装一个叫格式工厂的软件。2然后打开->mp4。3点击添加文件的选项。4然后选择需要转换的视频,点击确定。5点击确定之后,再添加到转换列表中就可以。6再点...
- 迅雷beta官网(迅雷beta官方网)
-
若手机不能安装软件/游戏,建议:1.检查“未知来源”设置是否开启。2.查看下载的软件格式是否为机器所支持的。安卓系统手机支持的软件格式为.APK格式。3.下载软件时请阅读软件详情,查看是否对机器操作系...
- 私人家庭影院hd免费版游戏评测
-
《海上钢琴师》是由朱塞佩·托纳托雷执导,蒂姆·罗斯、比尔·努恩、梅兰尼·蒂埃里主演的剧情、音乐、爱情片。该片讲述了一个被命名为“1900”的弃婴在一艘远洋客轮上与钢琴结缘,成为钢琴大师的传奇故事。该片...
- 题库网(题库网站有哪些)
-
学科网的试卷有续费的和不需要交费的两类试卷,如果你是学科网的用户,可以下载试卷,还可以组卷,对于我们一线的老师来讲,这很方便的,只要学校肯出钱,在学科网前,全校的老师就可以注册免费试用学科,网上所有的...
- 类似迅雷的下载器有哪些(手机下载工具app)
-
推荐闪电下载和黑科技下载这两款APP手机上取代迅雷的下载器有闪电下载APP和黑科下载器APP等,以这两款为例,它们都是可以支持ed2k、磁力链等下载方式,也能够支持多种不同类似的文件的高速下载。、BT...
- qq号申请免费注册官网(qq注册账号免费申请网址)
-
你好,通用的申请QQ号码的方法如下:1、首先打开腾讯官网。2、在腾讯页面左边的通信工具里面点击号码。3、点击号码以后就会进入QQ注册页面。4、进入QQ注册页面以后,在昵称后面输入要注册号码的名字。5、...
- 安卓安装windows(安卓安装apk解析包出错)
-
oppo手机支持安卓和Windows操作系统,但是双系统安装需要手机支持虚拟化技术(VT)。如果手机支持VT,可以在电脑上安装虚拟化软件,然后在手机上运行VT兼容的虚拟化应用程序,从而实现在电脑上安装...
- 安全中心下载(网易安全中心下载)
-
可以通过解除保护模式页面,查看QQ帐号进入保护模式的原因,及获取恢复QQ帐号正常使用的方法。点击小i,然后把自动登录选项去掉,打开safari,随便点一个网页,去登录。畅游经常这样抽风,可以关了游戏...
- 重装系统步骤(USB重装系统步骤)
-
正版的win10及以上系统,现在已经都自带系统重置功能,可以一键重置恢复到出厂设置。1.按住win+i,在弹出的windows设置对话框中,点击更新和安全选项,在弹出的设置对话框中,点击左侧的恢复选项...
- qq群发软件手机版免费(qq群发软件安卓版免费下载)
-
分享一个可以免费试用的软件,“www.liaotiangou.com”在做微信营销的时候经常会需要使用到群发功能,出了多群群发之外,还有定时群发,甚至是定时发送朋友圈。多群群发可以解决以前最多只能群发...
- 小说排行榜2020前十名(耿美小说排行榜2020前十名)
-
1、元龙《元龙》是目前2020年哔哩哔哩国创动漫热门榜的第一名,讲述的是一名来自现代的王牌狙击手,穿越到了玄幻的元魂世界,从此展开的一系列热血的战斗与机遇,成为元魂世界的霸者的故事。2、灵笼《灵笼》是...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
win7系统还原步骤图解(win7还原电脑系统的步骤)
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
16949认证费用是多少(16949审核员太难考了)
-
linux软件(linux软件图标)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
