诠释模式设计原则.docVIP

  • 12
  • 0
  • 约4.51千字
  • 约 5页
  • 2017-08-09 发布于重庆
  • 举报
诠释模式设计原则.doc

前言: 近日学习《JAVA与模式》,初看一两遍,简得其义,揣摩其意,深感不得其中精髓,更谈不是灵活应用于实践之中,欲求于网络同行之读书笔记,其意大都是书中摘录,亦无所获;故而私下记录心得体会,一来以拱众人证明并予指正,以便提高,二来以便其他初学者共同学习提高理解之用。 概义 多年来,同行非常注重软件设计的:可维护性,可复用性,可扩展性和灵活性,并以此为设计目标;而书中记录下的几大设计原则,为这个宏伟的目标铺平了道路;这些设计原则对于设计而言,不同人有不同层次的理解,设计的作品的水平也参差不齐,这也说明也其学习是一个长期地过程;在这个过程里,我们要反复琢磨、讨论,然后实践,以此反复。 一个糟糕的设计会出现许多令人头痛的问题,这些问题在《JAVA与模式》P.35.中摘录了下来:“过于僵硬,过于脆弱,复用率低,黏度过高”。这些问题在书中也摘录了其对立性的原因:“可维护性,可复用性,可扩展性与灵活性”;为此大家为实现这个目标提出了——“法”。 韩非子讲:“国无常强,无常弱。奉法强,则国强;奉法弱,则国弱”;可见对这原则——“法”是多么地重要;而且认识、理解、普及“法”,使之成为“法制社会”。 模式的核心——道 阐述我所谓的:“道”,先让我们来认识我说的:“问题领域”: 我把我所谓的的问题领域分成两部份,“静态问题领域”和“动态问题领域”;我们从小到大学习了这么多知识,对一类的事实都有一些共同的看法,或都称它们为知识,我叫它静态问题领域;随着时间的推移,这些事物会发生变化,比如人会老去,但他还是那个人;这类变化的问题我称之动态问题领域;当然这两都间都有联系,也存在着转化,如我用太极图(图A)表示: 静态问题领域与动态问题领域的表示方法: 首先树型数据与继承等级结构在语义是是想等的;而合成模式与装饰模式也可以生成的链式对象结构,这与线型数据结构也是雷同的。 A.静态问题领域:继承等级结构一但确定下来,改变起来就很困难,想重构代码就要花很大的精力(图B),用它来描述静态问题领域再好不过了(因为运行继承的代码比运行动态联结的代码快,而且易于管理); B.动态问题领域:a.图D中有线型数据结构(合成模式和装饰模式图E可以将它们将对象生成线形结构),用它来描述动态问题领域。 b.图C是桥梁模式,这个模式之所以妙就是利用对象引(关联)把抽象化角色与实现化角色脱耦了;所以接口成了关联、脱耦的重要工具了。(注意:1:接口只是用来代表一个角色,多个角色是对接口的污染——接口隔离原则;2:理会这个模式对于理会策略、状态命令、观察者、建造模式很有意义) 接口的本质:它本身用来表示一个角色,而角色可以代表动态问题领域的一种可变性,它用来参与与静态问题领域的关联,从而形成动态引用。(使用接口与合成聚合模式的好久详情请见《java与模式》一书) 细化问题: 解决这个问题领域论的模型最终是要用代码来实现的,既然如此,我们将这些代码分成许多小块,这些小块比函数小,又具有一定的语义,这些小块用集合中的元素表示,称它为元素代码。 作用与效果:如果用继承等级结构(树型数据结构)和合成模式与装饰模式(线型数据结构)来组织元素代码,而且元素代码划分得非常合理,我们可以将代码复用的目的达到最大限度。 步骤:元素代码之间不组合形成不同行为,不同的行为又组合成不同的类;而这些类之间又有相同的元素代码,从而组合成了继承等级结构与链式结构;这个过程要用分类思想来作指导,结果要使类从分类学上有意义。 用继承的工具来描述这些组合,共同的元素代码尽向上移,数据尽量向下移;这样做的好外非常明显,一来这种组合已经定义好了,二来在新的需求下,找准自己想要的结点来复用已有的代码,使之成为该结点下的叶子结点;缺点就是这个组合早已经成为定局,想从新组合就非常困难。 B.a.用合成模式、装饰模式动态生成对象链,让它们动态联结代码,这样的确非常灵活,但这样的小类太多了,实在难于管理。好处就在于解决了继承等级的缺点;这好比一个男人在外面有了太多的女人,把关系搞得过于复杂,此人虽然艳福不浅,但也有隐痛啊!比如金庸先生的《天龙八部》里的段正淳就是一例。 b.静态问题领域可以用一个接口的形式来管理动态生成的对象链,它可以用来代表一个角色,从而封装一种可变性;是支持角色的一种机制;也可以这样理解:静态问题领域是消费者,实体角色是产品,接口是说明书。 两种问题领域之间的关系: 静态问题领域与动态问题领域的转化:问题领域中不确定的变化的现像,在经过长期实践是可以转化静态问题领域的知识,而静态的知识随着时间的变化也是会过时的。 例如:几亿年前,猴类随着时间、环境的变化,最终进化成为人类;那你有可能会问,如果人不思劳动,像动物那样天天只知道吃喝睡玩乐,会退化为之前的猴吗?这个问题我想没有人知道,应该由时间来证明,呵呵!不过这就

文档评论(0)

1亿VIP精品文档

相关文档