设计模式有什么用?开始看到设计模式这四个字心里总想知道这个问题,不过当真的知道了,就会觉得问这个问题有点傻......(恨不得拿头去撞墙......)
设计模式有什么用?设计模式说白了就是一种前人设计代码或者说软件总结出来的模板(很有用的)。我们学习它就是问了经验复用。为了让自己的代码能更好的适 应变化,提高程序的可维护性和可扩展性。学写代码就是这样,就是用别人的经验和权威的原则写出能解决客户需求的代码,虽然创新思维是好东西,没必要什么都 自己来创造,不可以总结造电灯,自己造个编程语言再自己开发代码。所以学习前者的经验是我们的主流。
我们是基于一些OOP是设计原则根据不同的需求通过不同的设计模式来到底所说的:更好的适应变化,提高程序的可维护性和可扩展性。
这是两个关于库和设计模式的问题:(出自:《HeaderFirst 设计模式》)
1.问:设计模式是库吗?
答:设计模式比库的等级更高。设计模式告诉我们如何组织类和对象以解决某种问题。而且采纳这些设计使他们更适合我们特定的应用。
2.问:.库和框架不是设计模式?
答:库和框架提供了我们某些特定的实现,让我们的代码可以轻易的应用,但这并不算设计模式。有时候,库和框架本身会用到设计模式,学习设计模式可以帮助了解API是围绕什么设计结构的。
下面是一段介绍设计模式的文字:
设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。
GoF(Gang of Four,指《设计模式-可复用面向对象软件的基础》的四位作者:Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides)的“设计模式”是第一次将设计模式提升到理论高度,并将之规范化,本书提出了23种基本设计模式,自此,在可复用面向对象软件的发展 过程中,新的大量的设计模式不断出现。
设计模式和框架
现在,可复用面向对象软件系统现在一般划分为三大类:应用程序 工具箱和框架(Framework),我们平时开发的具体软件都是应用程序;Java的API属于工具箱;而框架是构成一类特定软件可复用设计的一组相互 协作的类。EJB(Enterprise JavaBeans)是Java应用于企业计算的框架.
框架通常定义了应用体系的整体结构 类和对象的关系等等设计参数,以便于具体应用实现者能集中精力于应用本身的特定细节。框架主要记录软件应用中共同的设计决策,框架强调设计复用,因此框架设计中必然要使用设计模式.
另 外,设计模式有助于对框架结构的理解,成熟的框架通常使用了多种设计模式,如果你熟悉这些设计模式,毫无疑问,你将迅速掌握框架的结构,我们一般开发者如 果突然接触EJB J2EE等框架,会觉得特别难学,难掌握,那么转而先掌握设计模式,无疑是给了你剖析EJB或J2EE系统的一把利器
一个模式的四个基本要素
设计模式使人们可以更加简单方便地复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。
1. 模式名称(pattern name)
一个助记名,它用一两个词来描述模式的问题、解决方案和效果。命名一个新的模式增加了我们的设计词汇。设计模式允许我们在较高的抽象层次上进行设计。基于一个模式词汇表,我们自己以及同事之间就可以讨论模式并在编写文档时使用它们。模式名可以帮助我们思考,便于我们与其他人交流设计思想及设计结果。找到恰当的模式名也是我们设计模式编目工作的难点之一。
2. 问题(problem)
描述了应该在何时使用模式。它解释了设计问题和问题存在的前因后果,它可能描述了特定的设计问题,如怎样用对象表示算法等。也可能描述了导致不灵活设计的类或对象结构。有时候,问题部分会包括使用模式必须满足的一系列先决条件。
3. 解决方案(solution)
描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。
4. 效果(consequences)
描述了模式应用的效果及使用模式应权衡的问题。尽管我们描述设计决策时,并不总提到模式效果,但它们对于评价设计选择和理解使用模式的代价及好处具有重要意义。软件效果大多关注对时间和空间的衡量,它们也表述了语言和实现问题。因为复用是面向对象设计的要素之一,所以模式效果包括它对系统的灵活性、扩充性或可移植性的影响,显式地列出这些效果对理解和评价这些模式很有帮助。
四种设计模式的作用:
外观(Facade):为了系统中的一组功能调用提供一个一致的接口,这个接口使得这一子系统更加容易使用;
装饰(Decorate):当不能采用生成子类的方法进行扩充时,动态地给一个对象添加一些额外的功能;
单件(Singleton):保证一个类仅有一个实例,并提供一个访问他的全局访问点;
模板方法(Template Method):在方法中定义算法的框架,而将算法中的一些操作步骤延迟到子类中实现。
下面是关于模式的一些介绍:
模式(pattern)就是做事的一种方法,也即实现某个目标的途径,或者技术。这种捕获有效技术的思想可以应 用到许多领域当中,比如烹饪、生产焰火制品、开发软件以及其他一些行业。对于任何一个正迈向成熟的行业,人们总会开始寻找一些通用和有效的方法,来达到目 标并解决不同场合中的问题。由某个行业的从业人员组成的社区通常会发明一些专业术语,以便于同行之间进行交流。这其中的某些专业术语将称为模式,即实现特 定目标的公认技术。随着某个行业及其专业术语的发展,一些作者便开始起到重要的作用。他们将某个行业的模式记录归档,参与标准化专业术语,并且公开传播这 些有效的技术。
Christopher Alexander是最早将某个行业的最佳实践记录为模式的作者之一。他研究的领域是建筑(而不是软件)的架构。其著作A Pattern Language: Towns, Buildings, Construction[Alexander、Ishikouwa和Silverstein,1977]介绍了成功设计房屋和城镇的模式。该著作影响深 远,甚至影响到软件开发行业。该书之所以能够影响其他行业,部分原因是因为它给出了一种独特的观察目标的方式。
有人可能会认为,应用建筑模式的目 标就是“设计建筑物”。但是Alexander在书中明确指出建筑模式的目的是服务于建筑物和城镇的主人,并让他们感到满意。该书指出模式是获取和交流行 业知识的绝佳途径。另外,书中还提到,合理地认识并记录某项工作的目标非常关键,需要以哲学观从整体考虑,并可能面临难以捉摸的挑战。
模 式方法引起了软件社区的共鸣,许多记录软件开发模式的图书已经相继出版。这些书中记录了软件过程、软件分析、高层软件架构以及类层次设计的最佳实践。每年 都有这方面的新书面世。如果需要选择一本有关模式的图书,那么你应该先花些时间去浏览一下对已出版的这方面图书的书评,然后再选择一本能够最大程度帮助自 己的图书。