软件设计模式:Python设计模式系列的一: 用模式改善软件Software设计

  软件Software设计大师总是要比初学者更加清楚该如何设计软件Software他们手中掌握着设计模式这法宝作为种高级软件Software复用形式设计模式是众多优秀软件Software设计师集体智慧结晶能够很好地指导软件Software设计过程本系列文章介绍如何在用Python开发软件Software时应用各种设计模式Python是种简单、灵活、高效原型语言特别适合于用来理解和掌握设计模式

  、什么是设计模式

  设计模式(design pattern)提出是面向对象设计演化过程中个重要里程碑正如GammaHelmJohnson和Vlissides在他们经典著作设计模式书中所说:设计模式使得人们可以更加简单和方便地去复用成功软件Software设计和体系结构从而能够帮助设计者更快更好地完成系统设计

  设计模式概念最早起源于建筑设计大师Christopher Alexander有关城市规划和建筑设计著作建筑永恒思路方法尽管Alexander著作是针对建筑领域但他观点实际上适用于所有工程设计领域其中就包括软件Software设计领域建筑永恒思路方法书中Alexander是这样描述模式:

  模式是条由 3部分组成规则它表示了个特定环境、个问题和个解决方案的间关系个模式描述了个在我们周围不断重复发生问题以及该问题解决方案核心这样你就能次又次地使用该方案而不必做重复劳动

  将设计模式引入软件Software设计和开发过程在于充分利用已有软件Software开发经验这是设计模式通常是对于某类软件Software设计问题可重用解决方案优秀软件Software设计师都非常清楚不是所有问题都需要从头开始解决他们更愿意复用以前曾经使用过解决方案每当他们找到个好解决方案他们会遍又遍地使用这些经验是他们成为专家部分原因设计模式最终目标就是帮助人们利用熟练软件Software设计师集体经验来设计出更加优秀软件Software

  在软件Software设计领域中个设计模式都系统地命名、解释和评价了面向对象系统中个重要和可复用设计这样我们只要搞清楚这些设计模式就可以完全或者说很大程度上吸收了那些蕴含在模式中宝贵经验从而对软件Software体系结构有了比较全面了解更加重要这些模式都可以直接用来指导面向对象系统设计中至关重要对象建模问题实际工作中旦遇到具有相同背景场合只需要简单地套用这些模式就可以了从而省去了很多摸索工作

   2、经典设计模式MVC

  在长期软件Software实战过程中人们逐渐整理总结出了些实用设计模式并将它们应用于具体软件Software系统中出色地解决了很多设计上难题源于Smalltalk并在Java中得到广泛应用模型-视图-控制器(Model-View-ControllerMVC)模式是非常经典个设计模式通过它你可以更好地理解"模式"这概念

  MVC模式通常用在开发人机交互软件Software时候这类软件Software最大特点就是用户界面容易改变例如当你要扩展个应用功能时通常需要修改菜单来反映这种变化如果用户界面和核心功能紧紧交织在要建立这样个灵活系统通常是非常困难很容易产生为了更好地开发这样软件Software系统系统设计师必须考虑下面两个原因:

  用户界面应该是易于改变甚至在运行期间也是有可能改变

  用户界面修改或移植不会影响软件Software核心功能代码

  为了解决这个问题可以采用将模型(Model)、视图(View)和控制器(Controller)相分离思想在这种设计模式中模型用来封装核心数据和功能它独立于特定输出表示和输入行为是执行某些任务代码至于这些任务以什么形式显示给用户并不是模型所关注问题模型只有纯粹功能性接口也就是系列公开思路方法这些思路方法有是取值思路方法让系统其它部分可以得到模型内部状态则是置值思路方法允许系统其它部分修改模型内部状态

  视图用来向用户显示信息它获得来自模型数据决定模型以什么样方式展示给用户个模型可以对应于多个视图这样对于视图而言模型就是可重用代码般来说模型内部必须保留所有对应视图相关信息以便在模型状态发生改变时可以通知所有视图进行更新

  控制器是和视图联合使用它捕捉鼠标移动、鼠标点击和键盘输入等事件将其转化成服务请求然后再传给模型或者视图整个软件Software用户是通过控制器来和系统交互他通过控制器来操纵模型从而向模型传递数据改变模型状态并最后导致视图更新

  MVC设计模式将模型、视图和控制器 3个相对独立部分分隔开来这样可以改变软件Software个子系统而不至于对其它子系统产生重要影响例如在将个非图形化用户界面软件Software修改为图形化用户界面软件Software时不需要对模型进行修改而添加个对新输入设备支持则通常不会对视图产生任何影响

  应用了MVC设计模式软件Software系统其基本实现过程是:

  控制器创建模型;

  控制器创建个或多个视图并将它们和模型相关联;

  控制器负责改变模型状态;

  当模型状态发生改变时模型会通知和的相关视图进行更新

  如果用UML来表示MVC设计模式则如图1所示:

  >>> dir (g)
['_Greeting__data', '__doc__', '__init__', '__module__']

  从上面显示结果可以看出Greeting类属性__data变成了_Greeting__data虽然这样仍然无法阻止外界对它访问确使得访问变得不再那么直接了从而在上保护了类中数据不被外界破坏

   5、在Python中应用设计模式

  设计模式书整理总结了23个模式依据各自又被分为创建型模式(creational pattern)、结构型模式(structural pattern)和行为型模式(behavioral patterns)它们分别从对象创建对象和对象间结构关系以及对象的间如何交互这 3个方面入手对面向对象系统建模思路方法给予了解释和指导

  创建型模式描述怎样创建个对象以及如何隐藏对象创建细节从而使得代码不依赖于具体对象这样在增加个新对象时对代码改动非常小

  结构型模式描述类和对象的间如何进行有效组织形成良好软件Software体系结构主要思路方法是使用继承关系来组织各个类

  行为型模式描述类或对象的间如何交互以及如何分配职责实际上它所牵涉不仅仅是类或对象设计模式还有它们的间通讯模式

  这些设计模式如果能够在Python中直接应用对所有Python员来讲毫无疑问将是笔非常宝贵财富它们正确性和有效性已经被无数次实战所验证过了如果想在Python中灵活地运行这些设计模式可以遵循下面几个步骤:

  接受设计模式

  识别设计模式

  运用设计模式

  首先你应该认识到设计模式确能够改善你所设计软件Software其次你必须仔细研究每种设计模式学习如何在Python中应用这些模式以便在今后需要时能够用到它们最后你要努力做到对各个设计模式都有非常清晰认识最好能够形成自己独到见解清楚哪个模式能够解决哪个设计上问题并将它们真正应用到你用Python开发软件Software中去所有设计模式都来源于实战最终也将付诸于实战只有通过实战中你才可能掌握每个模式精髓所在

   6、小结

  设计模式就是解决软件Software开发和设计过程中某个特定问题特定思路方法它最初起源于建筑设计目前已经被广泛地应用在软件Software开发领域中设计模式是软件Software复用种特定形式理论上它和具体语言无关但实际应用时通常会依赖于语言所提供某些特性Python是门优秀面向对象脚本语言对象模型会影响到部分设计模式实现设计模式按其目可以被划分成区别种类分别用于解决区别方面实际问题

Tags:  软件设计模式

延伸阅读

最新评论

发表评论