设计模式简介

1.什么是设计模式

一个设计模式是针对某一类问题的最佳解决方案,而且已经被成功应用于许多系统的设计中,它解决了在某种特定情景中重复发生的某个问题,因此,可以这样定义设计模式:“设计模式是从许多优秀的软件系统中总结出成功的可复用的设计方案”
著名的建筑大师Alexander关于设计模式的经典定义:“每一个设计模式描述一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心,这样,你就能一次一次地使用该方案而不必做重复劳动”
记录一个设计模式需有四个基本要素:
1.名称:
一个模式的名称高度概括该模式的本质,有利于该行业统一术语,便于交流使用。
2.问题:
描述应该在何时使用模式,解释设计问题和问题存在的前因后果,描述在怎样的环境下使用该模式。
3.方案:
描述设计的组成部分,它们之间的相互关系及各自的职责和协作方式。
4.效果:
描述模式的应用效果及使用模式应当权衡的问题。主要效果包括使用模式对系统的灵活性,扩展性和复用性的影响。

2.设计模式的起源

软件领域的设计模式起源于建筑学。1977年,建筑大师Alexander出版了《A Pattern Language:Towns,Building,Construction》一书,Alexander在该著作中将其建筑行业中许多问题的最佳解决方案记录为200多种模式,这些模式为房屋与城市的建设制定了一些规则。Alexander著作中的思想不仅在建筑行业影响深远,而且很快影响到了软件设计领域。1987年,受Alexander著作的影响,Kent Beck和Ward Cunningham将Alexander在建筑学上的模式观点应用于软件设计,开发了一系列模式,并用Smalltalk语言实现了雅致的用户界面。Kent Beck和Ward Cunningham在1987年举行的一次面向对象的会议上发表了论文《在面向对象编程中使用模式》,在该论文发表后,有关软件的设计模式论文以及著作相继出版。

3.合理使用设计模式

不是软件的任何部分都需要套用模式来设计的,必须针对具体问题合理地使用模式。
1.正确使用
当设计某个系统,并确认所遇到的问题刚好适合使用某个模式,就可以考虑使用该模式到自己的系统设计中,毕竟该模式已经被公认是解决该问题的成功方案,能使设计的系统易维护,可扩展性强,复用性好,而且这些经典的模式也容易让其他开发人员了解你的系统和设计思想。
2.避免教条
模式不是数学公式,也不是物理定律,更不是软件设计中的法律条文,一个模式只是成功解决某个特定问题的设计方案,完全可以修改模式中的部分结构以符合自己的设计要求。
3.模式挖掘
模式不是用理论推导出来的,而是从真实世界的软件系统中被发现的,按着一定规范总结出来的可以被复用的方案。如果你从某个系统中洞察出某种新模式,只要经过“三次规则”就可以被行业认可。需要注意的,在寻找新的模式之前,必须先精通现有的模式,尤其是GOF(四人帮之书)之书中的23个模式,因为许多模式事实上只是现有模式的变种。通过研究学习现有的模式,不仅可以比较容易地识别模式,而且也能使你学会怎样综合地使用各种模式,即使用复合模式。如果认为自己真的发现了一种新的模式,那么就可以按着GOF书中提供的格式见你的“准模式”写成一份文档,该文档至少需要包括名称,问题,方案和效果四个方面,当然“准模式”需要经过“三次规则(即该模式已经在真实世界的三个方案中被成功地采用)”才能成为真正的模式。
4.避免乱用
在进行设计时,尽可能用最简单的方式满足系统的要求,而不是费尽心机地琢磨如何在这个问题中使用模式,一个设计中,可能并不需要使用模式就可以很好地满足系统的要求,如果牵强地使用某个模式可能会在系统中增加许多额外的类和对象,影响系统的性能,因为大部分设计模式往往会在系统中加入更多的层,这不但会增加复杂性,而且系统的效率也会下降。
5.了解反模式
所谓反模式就是从某种软件系统中总结出的不好的设计方案,反模式就是告诉你如何采用一个不好的方案解决一个问题。这是因为,这些不好的方案表面上往往会有很强的吸引力,人们很难一眼就发现它的弊端。

4.什么是框架

框架不是模式,框架是针对某个领域,提供用于开发应用系统的类的集合,程序设计则可以使用框架提供的类设计一个应用程序,而且在设计应用程序时可以针对特定的问题使用某个模式。
1.层次不同
模式比框架更抽象,模式是在某种特定环境中,针对一个软件设计出现的问题而给出的可复用的解决方案,不能向使用者提供可以直接使用的类,设计模式只有在被设计人员使用时才能表示为代码。
2.范围不同
模式本质上是逻辑概念,以概念的形式而存在,模式所描述的方案独立于编程语言。例如Java程序员,C++程序员等都可以在自己的系统设计中使用某个模式。
3.相互关系
一个框架往往会包括多个设计模式,它们是面向对象系统获得最大复用的方式,较大的面向对象应用会由多层彼此合作的框架组成。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

散一世繁华,颠半世琉璃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值