导读:周日,又给徒弟验收项目了。以往常的习惯一样,每次验收,我都陪着徒弟一起总结学习过程中的问题,然后互相交流。这次,一个徒弟验收的是设计模式,一个徒弟验收的是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,具体实现不同

框架可以用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示。而且,框架一般是作为代码重用,而模式是作为设计重用。

五、框架和架构

架构,又名软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。简单的说架构就是一个蓝图,是一种设计方案,将客户的不同需求抽象成为抽象组件,并且能够描述这些抽象组件之间的通信和调用。

区别:架构的抽象层级比之框架更高。框架更加倾向于技术,架构更倾向于设计,架构可以通过不同的框架来实现。

例子:建筑

现在这里有一堆的建筑材料,然后工程师会根据各方面的需求,将材料规整。确定各种材料的搭配和使用的地方,最后绘制出一幅(或者很多种)图纸。这一步,其实就是所谓的架构。然后工人们根据工程师给的这张图纸(可能是最终挑选出来的),开始利用这些材料,去搭建高楼。比如用钢筋,先架一个高楼的架子,这个就是框架。然后对框架进行砌砖灌注混泥土等,整个高楼就建好了。可是,这时候突然发现整体的框架是搭起来了了,但是出现了一些房间的偏小,不足。这时候,可能会在墙壁上装上一面镜子,利用光的原理来使房间隐形的增大,或者是一些别的方法等。在一个房间解决了问题,然后把这种方法应用到都出现了这一类问题的房间修筑中,这就是模式。当高楼建好了,楼盘开售,在观看楼盘的时候,在售楼中心,我们会看到这些高楼的缩小版,来决定是否购买。这些缩小版的高楼,就是这个楼盘的模型。

六、总结

架构(动词)>框架>设计模式。

软件通过架构,可以设计出很多不同的框架。在一个框架中,也可以使用很多的设计模式。设计模式不是哪儿哪儿都可以用的,只有当出现了某一特定的问题时,才利用设计模式去解决。设计模式不是用的越多越好,在维护的时候,过多的设计模式会极大的增添维护成本。

分类: ◆ C/S 学习,------【设计模式】

转载于:https://www.cnblogs.com/cjm123/p/8125181.html

【设计模式 2】设计模式的来源,及其相混淆的模型、框架、架构区别相关推荐

  1. 行为设计模式 - 命令设计模式

    行为设计模式 - 命令设计模式 命令模式是行为设计模式之一.命令设计模式用于在请求 - 响应模型中实现松散耦合. 目录[ 隐藏 ] 1命令模式 1.1命令设计模式示例 1.2命令模式接收器类 1.3命 ...

  2. 设计模式笔记--设计模式比较

    一.创建类模式大PK 创建类模式包括工厂方法模式.建造者模式.抽象工厂模式.单例模式和原型模式,它们都能够提供对象的创建和管理职责.其中的单例模式和原型模式非常容易理解,单例模式是要保持在内存中只有一 ...

  3. 大话设计模式之设计模式遵循的七大原则

    最近几年来,人们踊跃的提倡和使用设计模式,其根本原因就是为了实现代码的复用性,增加代码的可维护性.设计模式的实现遵循了一些原则,从而达到代码的复用性及增加可维护性的目的,设计模式对理解面向对象的三大特 ...

  4. 设计模式一の设计模式详解

    一.设计模式定义 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结. 使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证代码可靠性 ...

  5. 行为设计模式 - 解释器设计模式

    行为设计模式 - 解释器设计模式 解释器设计模式是行为设计模式之一.解释器模式用于定义语言的语法表示,并提供解释器来处理该语法. 解释器设计模式 解释器设计模式的最佳示例是java编译器,它将java ...

  6. 行为设计模式 - 迭代器设计模式

    行为设计模式 - 迭代器设计模式 迭代器设计模式中的一种行为模式.迭代器模式用于提供遍历一组对象的标准方法.Iterator模式广泛用于Java Collection Framework.Iterat ...

  7. 行为设计模式 - Memento设计模式

    行为设计模式 - Memento设计模式 Memento 设计模式是行为设计​​模式之一.当我们想要保存对象的状态以便稍后可以恢复时,使用Memento设计模式.Memento模式用于实现这一点,使得 ...

  8. 行为设计模式 - 状态设计模式

    行为设计模式 - 状态设计模式 状态设计模式是行为设计​​模式之一.当Object根据其内部状态更改其行为时,将使用状态设计模式. 目录[ 隐藏 ] 1国家设计模式 1.1状态设计模式接口 1.2国家 ...

  9. 行为设计模式 - 策略设计模式

    行为设计模式 - 策略设计模式 策略设计模式是行为设计模式之一.当我们为特定任务使用多个算法时,使用策略模式,客户端决定在运行时使用的实际实现. 策略设计模式 策略模式也称为战略模式.我们定义了多个算 ...

最新文章

  1. 机器翻译:谷歌翻译是如何对几乎所有语言进行翻译的?
  2. Django,Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传
  3. 概率论-4.1 大数定律
  4. 省掉bean自定义spring mvc注解注入json值
  5. ASP.Net请求处理机制初步探索之旅 - Part 5 ASP.Net MVC请求处理流程
  6. 滑动关机代码bat_BAT面试算法进阶--(2) 无重复字符的最长子串(滑动法优化+ASCII码法)...
  7. hive UDF函数取最新分区
  8. SQL Server IN语句使用举例
  9. mosquitto源码分析(六)
  10. matlab中的级数怎默算_matlab绘图小技巧-图像光滑数据取点
  11. Atitit.远程文件技术 webdav ftp scp ssh-sftp http nfs smb 的区别与总结
  12. FileUtils的简单读写文件操作
  13. BIG-ENDIAN VS LITTLE-ENDIAN
  14. Centos7搭建Frps服务端的教程
  15. 深度学习基础:机器学习中的基函数与函数空间
  16. 实时系统与分时系统的区别
  17. 学计算机cpu重要还是显卡重要,显卡处理器和内存 吃鸡时哪个最重要?
  18. 局域网分配适合的网络前缀
  19. No provider available from registry localhost:9090 for service
  20. 移动硬盘新加卷变为本地磁盘且不能打开磁盘查看文件

热门文章

  1. rust的应用前景分析
  2. bzoj3205: [Apio2013]机器人
  3. 在IEEE TVCG模板使用bib文件加入参考文献
  4. java springboot 监控线程池的状态
  5. C++读取和写入文件 Mark !! 汉字转拼音 带声调!
  6. 虚拟桌面网络设置技巧
  7. P1377 编码II (康拓展开)
  8. 巧用千寻位置GNSS软件|电离层抑制有一套
  9. 超小体积超薄封装2*2电容式单按键触摸触控IC,适合TWS蓝牙耳机/耳塞/耳麦
  10. 个人博客系统开发总结之 第三方登录(QQ、微博)