- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于Python设计模式探究
基于Python设计模式探究 摘 要:在面向对象的软件设计过程中,为了提升软件的复用性、灵活性、扩展性、可维护性、稳定性,程序员通过封装、继承、派生等手段对软件架构有目的性的进行了一些额外设计。在编码之初,可能觉得有无这些设计并不重要,但是随着软件的需求的变化以及功能的扩展,在后续软件的更改与维护过程中就会越发体现出这些设计工作必要性。以往,这些设计工作都是由有经验的程序员实施的,随着设计模式的成熟和增多,逐渐对这些设计模式进行了归纳与提取,并总结出了各种经典的设计模式供程序员学习与效仿。
【关键词】设计模式 Python 工厂模式 策略模式
Python是一种流行的动态脚本语言,具有语法简捷清晰、跨平台、编码效率高、可维护性强等特点。Python经历了十多年的发展,目前已相当成熟。Python拥有许多C/C++所不具备的优势,比如:编码效率,代码的规范性、可读性,丰富的内置数据类型、跨平台等,但最重要的一点是,Python同样支持面向对象,具有继承、派生等特性。
本文通过实际事例对各种常见的设计模式及设计原则进行讲解,在体现设计模式必要性的同时也对python语言的进行了展示,为python程序员和爱好者提供了参考与借鉴。
1 设计模式
1.1 工厂模式
工厂模式指的是一个工厂对象决定创建出那一种具体的类对象。工厂模式由3个部分组成:工厂对象、抽象产品对象以及具体产品对象,工厂模式如所示。工厂模式通过抽象出的产品对象,减少了代码的耦合。工厂模式如图 1所示。
1.2 策略模式
策略模式是将一系列算法进行封装,对外提供统一的调用接口。策略模式中的各种算法虽然实现不同,但都以相同方式调用。策略模式减少了算法之间的耦合。策略模式如图 2所示。
2 实现及优化
2.1 原始设计
某公司需要对员工考勤记录进行统计。考勤记录为打卡机生成的excel表。根据需求可以很容易的想到要设计2个类来实现上述功能:一个为操作excel的类(ExcelClass类),另一个则是用于统计各种考勤信息的类(OverTime类)。
程序结构大致可以表述如下:
m_OverTimer = OverTime()
myExcel = ExcelClass(“考勤记录.xls”)
m_AllRecords = myExcel. getallRecord
result = m_OverTimer. Process(m_AllRecords)
2.2 简单工厂模式
接近年终,公司领导为完成年度任务,要求部分员工实行611工作制,并严格考勤,于是考勤软件需要实现对611员工迟到、早退、旷工的特殊处理。首先肯定会想到的是要对OverTime进行派生,派生出对普通员工统计的子类(OverTimeNormal)和对611制员工统计的子类(OverTime611)对Process函数进行考勤处理。然后在业务代码中对员工姓名进行判断,如果属于611工作制的员工,则生成OverTime611类对象进行处理,反之则生成OverTimeNormal对象进行处理。
程序大致可以表述如下:
myExcel = ExcelClass(“考勤记录.xls”)
m_AllRecords = myExcel. getallRecord
if (m_AllRecords.name in 611NameList):
m_OverTimer = OverTime611
result = m_OverTimer. Process(m_AllRecords)
else:
m_OverTimer = OverTimeNormal
result = m_OverTimer. Process(m_AllRecords)
这样虽然可以达到目的,但是如果再派生出其他之类(如724工作制),那么不仅需要对派生类进行编写,还需要改动业务代码。这无疑增加了程序的耦合性。于是可以考虑采用工厂模式。
定义了一个工厂函数类,它依据员工姓名生成对应的m_OverTimer.对象,不同对象调用子类重载的Process函数对考勤时间进行计算。
工厂类表述如下:
class factory():
def __init__ (self,name):
if (name in 611NameList):
self.m_OverTimer = OverTime611
else:
self.m_OverTimer = OverTimeNormal
业务代码大致可以表述如下:
myExcel = ExcelClass(“
您可能关注的文档
最近下载
- 河南科技大学《物权法》2021-2022学年第一学期期末试卷.doc VIP
- GSP内审检查表完整版.doc VIP
- JJG(交通) 156-2020 -振弦式应变测量系统检定规程.docx VIP
- 福建省晋江市季延中学2024年高考适应性考试英语试卷含解析.doc VIP
- 15《红红火火中国年》第1课时(课件)2025道德与法治二年级上册统编版.ppt
- 2025年连云港专业技术人员公共课程公需考试-学习贯彻党的二十届三中全会精神.docx VIP
- 福建省晋江市季延中学2025届高三下学期期中历史试题模拟试题含解析.doc VIP
- 机械制图习题集(第三版).docx VIP
- 23.黄继光 课件(共45张PPT).pptx VIP
- 大明英烈传京畿歼灭战.pdf VIP
原创力文档


文档评论(0)