【设计模式 2】设计模式的来源,及其相混淆的模型、框架、架构区别
导读:周日,又给徒弟验收项目了。以往常的习惯一样,每次验收,我都陪着徒弟一起总结学习过程中的问题,然后互相交流。这次,一个徒弟验收的是设计模式,一个徒弟验收的是UML,本篇博客,就先写写设计模式的东西。
一、基本概念
1.1,模式(pattern)
在汉语词典中,模式一词的意思是:事物的标准样式。
在百度百科中,模式一词的意思是:是一种认识论意义上的确定思维方式。是人们在生产生活实践当经过积累的经验的抽象和升华。简单地说,就是从不断重复出现的事件中发现和抽象出的规律,是解决问题形成经验的高度归纳总结。只要是一再重复出现的事物,就可能存在某种模式。
1.2,设计模式
设计模式(Design pattern):是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
一个设计模式,是一个已被记录的最佳实践或一个解决方案。这个最佳实践或解决方案已被成功应用在许多环境中,它解决了在某种特定情境中重复发生的某个问题。Christopher Alexander的建筑模式:“针对在某个特定背景和作用力系统中发生的通用问题的常见解决方案”。背景:给定模式能够适用的条件;情境:作用力系统---在这个特定背景下的约束条件集合。
二、设计模式的来源
2.1,建筑中的模式
20世纪70年代Christopher Alexander研究了为解决同一个问题而设计出的不同建筑结构。发现了那些高质量的设计中的相似性。用“模式语言“来指代这种相似性。–A Pattern Language: Towns, Buildings, Construction(牛津大学出版社,1977年)
由Alexander发现并记录的这些模式仅仅是涉及诸如建筑物、花园和道路之类的建筑学方面的模式。
2.2,从建筑学模式到软件设计模式
1987年,受Alexander作品的影响Kent Beck和Ward Cunningham把建筑学上的模式观点应用于软件设计和开发。他们利用Alexander的一些观点开发了一系列模式,用Smalltalk语言实现了雅致的用户界面。利用这个工作成果,他们在1987年召开的“面向对象的编程系统、语言和应用程序(OOPSIA)研讨会”上做了一个以《在面向对象编程中使用模式语言》为题的演讲。1994年,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides合作的以《设计模式—可复用的面向对象软件的基本原理》解释了模式的用处,同时也使得设计模式得到广泛的普及。
备注:设计模式并不等同与软件模式,而只是其中的一个分支。软件模式还包括:架构模式,体系结构模式等。
三、模式与模型
3.1,概念
模型:通过主观意识借助实体或者虚拟表现、构成客观阐述形态、结构的一种表达目的的物件(物件并不等于物体,不局限于实体与虚拟、不限于平面与立体)。在汉语词典中,模型最基本的意思,是样式。
提到模式,就很容易想到模型一词,那么模式与模型的区别是什么呢?
3.2,区别
模式:从根本上来说,是对特定问题的一个解决方案。模型,则是对于问题的一种描述。
比如说:这里马上要举行一个航天模型大赛。你在脑海中形成的最终的飞机样式或者说最终形成的实体飞机样式,就是一种模型。而在建造模型的过程中,遇到各种问题,你解决这些问题的方式,可以算是一种模式。注意:模式是解决反复出现问题的解决方案。
四、模式与框架
4.1,概念
在学习设计模式这一本书的时候,在最后提到了一个MVC。但是,MVC确实作为一种框架存在的,而不是模式。那么,这是为什么,它的区别在哪里?
框架(Framework):是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。框架可以看做是对于解决问题的一个流程的描述。
4.2,区别
4.2.1,本质不同
设计模式:是在某种特定上下文中针对一个软件生命周期中出现的问题而给出的多次适用的解决方案。
框架:框架是一组软件组件,它们互相协作提供了针对某个给定的问题领域中的应用程序所用到的一种可复用的体系结构。
4.2.2,范围不同
一个框架中可能包含很多个设计模式,设计模式是比框架更小的元素。
4.2.3,具体实现不同
框架可以用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示。而且,框架一般是作为代码重用,而模式是作为设计重用。
五、框架和架构
架构,又名软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。简单的说架构就是一个蓝图,是一种设计方案,将客户的不同需求抽象成为抽象组件,并且能够描述这些抽象组件之间的通信和调用。
区别:架构的抽象层级比之框架更高。框架更加倾向于技术,架构更倾向于设计,架构可以通过不同的框架来实现。
例子:建筑
现在这里有一堆的建筑材料,然后工程师会根据各方面的需求,将材料规整。确定各种材料的搭配和使用的地方,最后绘制出一幅(或者很多种)图纸。这一步,其实就是所谓的架构。然后工人们根据工程师给的这张图纸(可能是最终挑选出来的),开始利用这些材料,去搭建高楼。比如用钢筋,先架一个高楼的架子,这个就是框架。然后对框架进行砌砖灌注混泥土等,整个高楼就建好了。可是,这时候突然发现整体的框架是搭起来了了,但是出现了一些房间的偏小,不足。这时候,可能会在墙壁上装上一面镜子,利用光的原理来使房间隐形的增大,或者是一些别的方法等。在一个房间解决了问题,然后把这种方法应用到都出现了这一类问题的房间修筑中,这就是模式。当高楼建好了,楼盘开售,在观看楼盘的时候,在售楼中心,我们会看到这些高楼的缩小版,来决定是否购买。这些缩小版的高楼,就是这个楼盘的模型。
六、总结
架构(动词)>框架>设计模式。
软件通过架构,可以设计出很多不同的框架。在一个框架中,也可以使用很多的设计模式。设计模式不是哪儿哪儿都可以用的,只有当出现了某一特定的问题时,才利用设计模式去解决。设计模式不是用的越多越好,在维护的时候,过多的设计模式会极大的增添维护成本。