《设计模式》这本书被许多人奉为一个经典的作品,他让新人更快加入到专家的行列中去。正如作者所提到的那样,复用以前使用的方案是成为专家的部分原因。 模式描述的是一个重复发生的问题以及该问题解决方案的核心,作者以一个文档编辑器的实例引出3大类23小类的设计模式,如下所示。
1、创建型模式
(1)、抽象工厂 ABSTRACT FACTORY
(2)、生成器 BULIDER
(3)、工厂方法 FACTORY METHOD
(4)、原型 PROTOTYPE
(5)、单件 SIGNLETON
2、结构型模式
(1)、适配器 ADAPTER
(2)、桥接 BRIDGE
(3)、组合 COMPOSITE
(4)、装饰 DECORATE
(5)、外观 FACADE
(6)、享元 FLYWEIGHT
(7)、代理 PROXY
3、行为型模式
(1)、职责链 CHAIN OF RESPONSIBILITY
(2)、命令 COMMAND
(3)、解释器 INTERPRETER
(4)、迭代器 ITERATOR
(5)、中介者 MEDIATOR
(6)、备忘录 MEMENTO
(7)、观察者 OBSERVER
(8)、状态 STATE
(9)、策略 STRATEGY
(10)、模板方法 TEMPLATE METHOD
(11)、访问者 VISITOR
显然,文档编辑器中所遇到的问题以及从中总结的设计模式只是诸多问题的冰山之一角,难免挂一漏万。作者更侧重的是从用户角度来看待设计模式的问题,从用户 角度来解析用户和对象之间的关系。但是我们应该知道,对象之所以为对象,是因为其本身具有独立性,即使用户不存在,对象之间也有其固有的关系。如果我们将 对象拟人化来考虑的话,完全可以将人类社会中的关系移植到对象之间,因此也可以从此引申出新的设计模式。
从事这么多年的开发工作,也从中发现不少值得说道的地方,比如管理型模式,下面我们参照《设计模式》这本书的描述方式来描述新的设计模式。
(一)、主从型(affiliation)
1、意图
确定对象之间的主从关系,使得根据从对象就可以反向得到主对象,同样的,根据主对象也可以正向得到从对象。创建或者销毁从对象的时候,能自动同时销毁其在主对象中的引用。销毁主对象的时候,能自动销毁所有的从对象。
2、动机
对象和对象之间,往往不是单独存在的,一个对象可以包含很多其他的对象,也可能被其他多包含,而从构成了主从关系,这是一种很普遍的现象。就像结构型模式 中的组合型设计模式,许多对象往往需要组合成更加庞大的对象,方便用户使用。《设计模式》的作者从用户角度来看这个问题,那么就形成了组合设计模式,但是 我们应该可以看到,组合模式中的元素对象和组合对象实际上已经构成了从对象和主对象的关系。如果用户只是简单的使用组合对象,问题并不大,但是如果用户动 态地增加删除其中的元素对象,又会发生什么情况呢?那么极有可能访问已经被销毁的对象,从而导致访问错误。如何管理好这两种对象之间的关系,也就是这个设 计模式所要讨论的问题。
与组合模式不同的是,主从型模式并关心主对象和从对象是否是一致的,他们之间仅仅是管理和被管理的关系,最重要的是当从对象被创建或者销毁的时候,能够自 动管理自己在主对象中的引用。举个例子,一个旅客要住宾馆时,自己到总台登记后,得到房间,然后入住;当他要离开时,也是自己到总台去注销后离开。总台可 以从登记记录中得到该旅客的信息,而该旅客也可以从总台获取旅馆的信息。登记和注销的行为是由旅客主动发出的,而不是总台。在主从型模式中也是这样的,创 建和销毁的行为是由从对象自己发出的,但是可以让主对象被动的感知。这个细节应该是对用户透明的,用户只要知道自己对从对象的操作就可以了,至于从对象和 主对象的关系可以无需关心。
3、适用性
对象之间具有主从关系,我们希望只要对其中一个对象进行操作,而由系统自动维护他们之间的关系。
4、效果
(1)、可以由简单对象为从对象,建立主对象,从而递归地构成网络状的复杂对象图。
(2)、简化对象管理,我们销毁一个对象时候,只需要针对我们所要销毁的那个对象,而无需考虑其他对象。
5、实现
(1)、分别为对方建立一个链表,同时实现维护这个链表的方法
(2)、当从对象创建或者销毁自身时,同时维护主对象中的链表
(3)、当主对象被销毁时,销毁链表中的每个从对象,同时销毁链表
www.romandion.com个人网站提供《设计模式》的PDF格式文件下载。