0、Python与设计模式--前言

一、什么是设计模式?

什么样的程序员是一个好的程序员?学会很多门编程语言,就是一个好的程序员了么?事实上,学会一门编程语言不是一件很难的事,而“学会”一门编程语言是非常难的一件事。前一个“会”强调“能”,懂语法,能写简单的程序就算是前者的“会”了;后一个“会”,强调“精”,显然,光能写出“Hello World”并不算是后者的“会”,能熟练应用,并用编程语言解决各种问题,才算是真正的“会”。编程语言就像是世界上任何有意义的东西一样,它在一直变化,一直进化,此刻学会的编程语言,到了下一刻,就可能有新东西出来,跟上它进步的节奏,本身就是一件非常费精力的事,更别说去在这个基础上,去“会”第二门编程语言了。因而,个人认为,使用过很多种的编程语言,并不是成为一个好的程序员的充分条件。一个好的程序员,更多的体现不应该在他会使用多少“工具”,而是他能使用这些“工具”,创造多么大的成绩,解决多么大的问题。掌握解决问题的方法,能用自己精通的编程语言解决各种问题,这才是成为一个优秀程序所必备的。
正因为如此,我们才需要学习设计模式。设计模式是面对各种问题进行提炼和抽象而形成的解决方案。这些设计方案是前人不断试验,考虑了封装性、复用性、效率、可修改、可移植等各种因素的高度总结。它不限于一种特定的语言,它是一种解决问题的思想和方法。

二、设计模式的意义

现在社会的发展可谓突飞猛进,过去常常被当作软件行业标杆的“软件工程”设计模型,逐渐让出了它的半壁江山,给了一种叫作“敏捷开发、快速迭代”的软件开发方式。快速迭代的环境下,需求就显得不那么明确,需求常常伴随着整个项目的进行而变化。需求的不确定性,对程序编写的要求就会比较高了。首先要考虑各种可能需求的兼容,但考虑的需求越多,就很容易陷入整个软件架构设计的深渊,不可自拔。设计模式对需求变更与代码重用的考虑,可以被作为软件设计的参考,由于设计模式基本上本着“高内聚、低耦合”的原则,遵循设计模式而设计的代码结构,常常会有着对需求的适应性。
一个大型的软件项目,不可能由一个人完成,此类项目常常需要多个软件开发工程师的协同开发。既然是协同开发,就一定会涉及到模块间的相互影响,一个工程师编写的一行代码,可能会影响到其它工程师代码的诸多因子。如果工程师之间的相互影响过大,那么整个项目无法形成合力,也就无法按时保质完成。最理想的情况下,一个工程师的代码不要影响到别人的模块,但有时,又不得不去借用或者被借到其它模块。这其中的组织,也是需要智慧的。设计模式同样可以作为协同作业的参考,遵循设计模式而设计的代码结构,尽可能地减少模块间的不必要依赖,在协同工作条件下,对项目的有序进行有着非常大的帮助。
公司人事会有变动,程序员也会成长。不管是哪种情况,代码非常有可能会被移交,即代码的编写者和维护者很有可能会是不同的人。那么代码的可读性就显得非常重要了。由于高级语言的出现,让机器读懂你的意图已经不是最主要的“矛盾”,而让人读懂你的意图才是最重要。按照设计模式编写的代码,其可读性也会大大提升,利于团队项目的继承和扩展。

三、有哪些设计模式?

设计模式可以分为三个大类:创建类设计模式、结构类设计模式、行为类设计模式。创建类设计模式可以分为单例模式、工厂模式、抽象工厂模式、原型模式、建造者模式;结构类设计模式可以分为装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式;行为类设计模式可以细分为策略模式、责任链模式、命令模式、中介者模式、模板模式、迭代器模式、访问者模式、观察者模式、解释器模式、备忘录模式、状态模式。本课程主要针对这23种设计模式进行基于Python代码的实例学习。
随着现代社会各类业务规模越来越大,挑战越来越多,开源技术不断发展,设计模式也衍生出了很多的新的种类,不局限于这23种,在介绍这些基本的设计模式时,针对些新的“品种”也会简单进行介绍。

四、设计模式与架构、框架的关系

1、软件框架与设计模式的关系

软件框架随着软件工程的发展而出现,所谓的软件框架,是提取了特定领域的软件的共性部分所形成的软件体系,它并不是一个成熟的软件,而更像是一个“半成品”,程序员在框架之上,可以很方便地某些特定领域实现又快又可靠的二次开发。
设计模式和软件框架在软件设计中是两个不同的研究领域:A、设计模式如前边的定义所讲,它指的是针对一类问题的解决方法,一个设计模式可应用于不同的框架和被不同的语言所实现;而框架则是一个应用的体系结构,是一种或多种设计模式和代码的混合体;B、设计模式相较于框架更容易移植,并且可以用各种语言实现,而软件框架则受限于领域大环境。虽然设计模式和软件框架有很多不同,但在某些方面他们二者是统一的,即重视软件复用,提高开发效率。

2、软件架构与设计模式的关系

软件架构是个比较大的概念,架构要考虑软件的整体结构、层次划分以及不同部分间的协作和交互等,架构的着眼点偏整体。相比之下,框架和设计模式的范围则具体很多,框架着眼于领域内的解决方法,而设计模式则针对一类问题的解决方案和设计思路。
总体来说,软件架构可以由不同的框架和不同的设计模式,再加上特定的构件组合来实现;框架可以根据设计模式结合特定编程语言和环境来实现。设计模式就是解决单一问题的设计思路和解决方法。

时间: 2024-08-28 10:39:04

0、Python与设计模式--前言的相关文章

Python系列干货之Python与设计模式!

设计模式是面对各种问题进行提炼和抽象而形成的解决方案.这些设计方案是前人不断试验,考虑了封装性.复用性.效率.可修改.可移植等各种因素的高度总结.它不限于一种特定的语言,它是一种解决问题的思想和方法. 设计模式可以分为三个大类:创建类设计模式.结构类设计模式.行为类设计模式.创建类设计模式可以分为单例模式.工厂模式.抽象工厂模式.原型模式.建造者模式:结构类设计模式可以分为装饰器模式.适配器模式.门面模式.组合模式.享元模式.桥梁模式:行为类设计模式可以细分为策略模式.责任链模式.命令模式.中介

1、Python与设计模式--单例模式

一.总线 总线是计算机各种功能部件或者设备之间传送数据.控制信号等信息的公共通信解决方案之一.现假设有如下场景:某中央处理器(CPU)通过某种协议总线与一个信号灯相连,信号灯有64种颜色可以设置,中央处理器上运行着三个线程,都可以对这个信号灯进行控制,并且可以独立设置该信号灯的颜色.抽象掉协议细节(用打印表示),如何实现线程对信号等的控制逻辑. 加线程锁进行控制,无疑是最先想到的方法,但各个线程对锁的控制,无疑加大了模块之间的耦合.下面,我们就用设计模式中的单例模式,来解决这个问题. 什么是单例

Python的设计模式编程入门指南_python

有没有想过设计模式到底是什么?通过本文可以看到设计模式为什么这么重要,通过几个Python的示例展示为什么需要设计模式,以及如何使用.设计模式是什么? 设计模式是经过总结.优化的,对我们经常会碰到的一些编程问题的可重用解决方案.一个设计模式并不像一个类或一个库那样能够直接作用于我们的代码.反之,设计模式更为高级,它是一种必须在特定情形下实现的一种方法模板.设计模式不会绑定具体的编程语言.一个好的设计模式应该能够用大部分编程语言实现(如果做不到全部的话,具体取决于语言特性).最为重要的是,设计模式

5、Python与设计模式--代理模式

一.网络服务器配置白名单 代理模式是一种使用频率非常高的模式,在多个著名的开源软件和当前多个著名的互联网产品后台程序中都有所应用.下面我们用一个抽象化的简单例子,来说明代理模式. 首先,构造一个网络服务器: #该服务器接受如下格式数据,addr代表地址,content代表接收的信息内容 info_struct=dict() info_struct["addr"]=10000 info_struct["content"]="" class Serv

4、Python与设计模式--原型模式

一.图层 大家如果用过类似于Photoshop的平面设计软件,一定都知道图层的概念.图层概念的提出,使得设计.图形修改等操作更加便利.设计师既可以修改和绘制当前图像对象,又可以保留其它图像对象,逻辑清晰,且可以及时得到反馈.本节内容,将以图层为主角,介绍原型模式. 首先,设计一个图层对象. class simpleLayer: background=[0,0,0,0] content="blank" def getContent(self): return self.content d

15、Python与设计模式--中介者模式

一.仓储管理系统 有一个手机仓储管理系统,使用者有三方:销售.仓库管理员.采购.需求是:销售一旦达成订单,销售人员会通过系统的销售子系统部分通知仓储子系统,仓储子系统会将可出仓手机数量减少,同时通知采购管理子系统当前销售订单:仓储子系统的库存到达阈值以下,会通知销售子系统和采购子系统,并督促采购子系统采购:采购完成后,采购人员会把采购信息填入采购子系统,采购子系统会通知销售子系统采购完成,并通知仓库子系统增加库存.从需求描述来看,每个子系统都和其它子系统有所交流,在设计系统时,如果直接在一个子系

16、Python与设计模式--模板模式

一.股票查询客户端 投资股票是种常见的理财方式,我国股民越来越多,实时查询股票的需求也越来越大.今天,我们通过一个简单的股票查询客户端来认识一种简单的设计模式:模板模式.根据股票代码来查询股价分为如下几个步骤:登录.设置股票代码.查询.展示.构造如下的虚拟股票查询器: class StockQueryDevice(): stock_code="0" stock_price=0.0 def login(self,usr,pwd): pass def setCode(self,code):

17、Python与设计模式--迭代器模式

一.迭代器与生成器 今天的主角是迭代器模式.在python中,迭代器并不用举太多的例子,因为python中的迭代器应用实在太多了(不管是python还是其它很多的编程语言中,实际上迭代器都已经纳入到了常用的库或者包中).而且在当前,也几乎没有人专门去开发一个迭代器,而是直接去使用list.string.set.dict等python可迭代对象,或者直接使用__iter__和next函数来实现迭代器.如下例: if __name__=="__main__": lst=["hel

18、Python与设计模式--访问者模式

一.药房业务系统 假设一个药房,有一些大夫,一个药品划价员和一个药房管理员,它们通过一个药房管理系统组织工作流程.大夫开出药方后,药品划价员确定药品是否正常,价格是否正确:通过后药房管理员进行开药处理.该系统可以如何实现?最简单的想法,是分别用一个一个if-else-把划价员处理流程和药房管理流程实现,这样做的问题在于,扩展性不强,而且单一性不强,一旦有新药的加入或者划价流程.开药流程有些变动,会牵扯比较多的改动.今天介绍一种解决这类问题的模式:访问者模式.首先,构造药品类和工作人员类: cla