设计模式探讨

1、模式的定义:
什么是模式?应该没有一个很精确的定义,但我们可以通俗的来说。模式是特定的‘语境’中重复出现的设计‘问题’的‘解决方案’。模式是人们经验的积累,人们利用经验来指导新的软件的设计。
2、模式的分类:
由模式用于解决问题的规模和它的抽象程度高低来划分,由高至低可分为体系结构模式(architectural pattern)、设计模式(design pattern)和惯用法(idiom)。
我们通常讨论的都是设计模式。体系结构模式很容易理解,即如何设计一个应用系统范围的结构特性。在有了整体架构后,就需要用设计模式来解决一些子系统的模块的细化的设计问题。可能大家唯独对惯用法模式比较陌生。体系结构模式和设计模式都是语言无关的,独立与具体语言,抽象度高。而惯用法则是针对某一种具体编程语言的底层模式。描述如何使用给定语言的特性来解决问题。比如在C++中如何编程解决垃圾回收的问题,而显然Java中就不用考虑这个问题。这就是惯用法。代码层次的模式,代码层次的编程经验。
3、模式语言:
通过体系结构模式的指导确定软件的体系结构。设计模式呢则解决某一具体问题的设计问题,如工厂模式,单例模式等解决对象创建问题。由体系结构模式到设计模式,这个跨度十分大,模式语言正好解决这个问题。
模式语言是一组相关模式的组合。通常一些设计模式单独使用意义不大,而通常是一组模式结合着使用的。例如一个分布式J2EE应用的业务层通过值对象来进行数据传递(值对象模式),通过一个代理来给其它层提供服务(代理模式),通过封装复杂的调用提供一个简单统一的调用(门面模式),而在该应用的显示层则采用(装饰器模式)等等模式。这样,这一能解决某一问题的整套模式的集合,就是一个模式语言。它解决问题的粒度更大。
4、模式库(pattern repository):
就是存放模式的一个仓库,呵呵。是一个存放人们成功设计经验的仓库。将各种模式分类、描述和存储,提供方便的检索和浏览方式,让人们学习模式,学习模式的使用。
5、模式的采掘:
模式既然是人们的经验,显然我们不能够发明模式,而只能够从已进行的设计中总结成功的经验,发现模式。这个过程,就是模式采掘。

模式的层次
1、讨论如何更好的描述设计模式,讨论模式之间的关系,如何分类和组织模式,以让后来者系统的学习。
2、讨论模式语言,用多个模式的组合解决更大更复杂的问题。如何描述和分类组织模式语言。
3、讨论软件体系结构模式,提出某一应用领域的软件的体系结构的设计,并讨论如何描述和如何应用之。
4、讨论如何采掘模式,发现新的模式。在已开发的多个系统中采掘成功的设计经验,然后描述并提出。
5、讨论如何构建一个模式库。这个模式库应具有的功能,她如何分类描述各种模式,如何描述模式间的关系。

以上共有五点,其实,最终可归纳为一点,即第五点,前四点都是为第五点而服务的。模式库的研究也就是研究如何对设计模式,模式语言,体系结构模式的分类和描述,如何采掘新模式等等。本人想建立一个体系结构模式库和设计模式模式库,收集、分类、组织和索引模式。或让新手学习过来人的成功经验,或基于这些模式以及结合构件库系统形成半自动的大规模的基于复用开发的软件生产线。

我们先讨论一下模式分类吧。现在我知道的有如下一些分类方法:
1、按规模和抽象程度划分:
体系结构模式、设计模式、惯用法。
2、按解决的问题划分:
例如分布式系统、交互式系统、访问控制、通信、资源处理等问题。
3、1+2,模式类别+问题类别,形成一个二维的模式分类图式。

随着模式库中模式的不断增多,理解和使用模式库就越困难。一个好的模式分类方法,有助于人们更好的理解模式。好的模式分类图式需具有如下一些特性:
+简单、易学,而不是复杂、难使用;
+少而精的分类标准;
+每个分类标准反应模式的自然属性;
+根据该分类能让用户找到一组可能适用的模式,而不是找到唯一适用模式;
+应对新模式的集成开发,而不需要对现有分类进行重构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值