我曾经看一个人,我读博客“每一个软件开发人员还希望成为一个既淋漓的动作和深厚内功“优”软件project联赛,设计模式的学习和理解会让你“内功”增加”,设计模式的魔力之大,如今我们就開始走进设计模式的世界。
一、设计模式的由来:
提到设计模式,我们应该先来了解一下模式的发展。
一般觉得模式起源于建筑领域。这里我们不得不提出一个人——克里斯托弗·亚历山大——世界著名建筑设计师。
他研究了为了解决同一个问题而设计出不同的建筑结构。发现了高质量的设计中的相似性,然后用“模式语言”来取代相似性。
克里斯托弗·亚历山大在著作《A Pattern Language》对每个模式(Pattern)都从Context(前提条件)、Theme或Problem(目标问题)、 Solution(解决方式)三个方面进行了描写叙述,并给出了从用户需求分析到建筑环境结构设计直至经典实例的过程模型。在Christopher Alexander的还有一部经典著作《建筑的永恒之道》中。他给出了关于模式的定义:
每一个模式都描写叙述了一个在我们的环境中不断出现的问题,然后描写叙述了该问题的解决方式的核心,通过这样的方式,我们能够无数次地重用那些已有的成功的解决方式,无须再反复同样的工作。
1987年,Kent Beck和Ward Cunningham受到他作品的影响。将模式语言应用道路了软件设计和开发中。1994年“四人组(Gang of Four。简称GoF,各自是Erich Gamma, Richard Helm, Ralph Johnson和JohnVlissides)”归纳发表了23种在软件开发中使用频率较高的设计模式,旨在用模式来统一沟通面向对象方法在分析、设计和实现间的鸿沟。
二、设计模式是什么
设计模式(Design pattern)是一套被重复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。设计模式是软件project的基石脉络。如同大厦的结构一样。
设计模式有4个关键的要素:模式名称、问题、解决方式、效果。
模式名称:它用一两个词来描写叙述模式的问题、解决方式和效果。
模式名能够帮助我们思考,便于我们与其它人交流设计思想及设计结果。
问题:描写叙述了应该在何时使用模式。
它解释了设计问题和问题存在的前因后果,它可能描写叙述了特定的设计问题,如如何用对象表示算法等。也可能描写叙述了导致不灵活设计的类或对象结构。有时候,问题部分会包含使用模式必须满足的一系列先决条件。
解决方式:描写叙述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。由于模式就像一个模板,可应用于多种不同场合,所以解决方式并不描写叙述一个特定而详细的设计或实现,而是提供设计问题的抽象描写叙述和如何用一个具有一般意义的元素组合(类或对象组合)来解决问题。
效果:描写叙述了模式应用的效果及使用模式应权衡的问题。
虽然我们描写叙述设计决策时,并不总提到模式效果,但它们对于评价设计选择和理解使用模式的代价及优点具有重要意义。软件效果大多关注对时间和空间的衡量,它们也表述了语言和实现问题。由于复用是面向对象设计的要素之中的一个,所以模式效果包含它对系统的灵活性、扩充性或可移植性的影响。显式地列出这些效果对理解和评价这些模式非常有帮助。
GoF提出的23中设计模式中分为三种类型:创建型、结构型和行为型。
当中创建型模式主要用于描写叙述如何创建对象,结构型模式主要用于描写叙述如何实现类或对象的组合,行为型模式主要用于描写叙述类或对象如何交互以及如何分配职责。
三、设计模式的用途
(1) 设计模式来源众多专家的经验和智慧。它们是从很多优秀的软件系统中总结出的成功的、可以实现可维护性复用的设计方案。使用这些方案将可以让我们避免做一些反复性的工作。
(2) 设计模式提供了一套通用的设计词汇和一种通用的形式来方便开发者之间沟通和交流。使得设计方案更加通俗易懂。
(3) 大部分设计模式都兼顾了系统的可重用性和可扩展性,这使得我们能够更好地重用一些已有的设计方案、功能模块甚至一个完整的软件系统。避免我们常常做一些反复的设计、编写一些反复的代码。
(4) 合理使用设计模式并对设计模式的使用情况进行文档化。将有助于别人更快地理解系统。
(5) 学习设计模式将有助于刚開始学习的人更加深入地理解面向对象思想。
在对设计模式的简单了解之后。接下来我们我们应该理解这一点23模式,体验之间的奥秘!
版权声明:本文博客原创文章,博客,未经同意,不得转载。