读书--设计模式精解之整体思考OR局部构建?

最近在读 Design Pattern Explained 作者:Allan Shalloway &James R. Trott,个人觉得这本书的确是一本做开发人员值得细品的书,我一口气看了两遍,觉得里面的讲解非常有思想,当然评价一本书的优劣不是我们这样的小民能说好的,我这里主要是摘录作者的一些思想来进行自我理解,达到自身提高和阅读本书的人一起思考。

 我的思维

        通常我是这样构建和思考一个问题的,我相信刚开始学习OO的同志和我的思考方式肯定是类似的,拿到一个问题的时候喜欢做分解,比如:设计一个MyNotePad(注:之所以叫MyNotePad,是因为这不是一个普通的NotePad例如windows自带的:),它是我们需要进行精心设计的有个性化,易用,很nice的系统。),大多数时候你会设计出这些菜单:File,Edit,View,Help...你可能就一个一个的把他们实现了然后做个个框架,把他们拼起来,好了你的设计就算基本完成了。有问题吗,看不出什么问题啊,分解是可以让我们有明确的目的去考虑问题,让自己很明确的知道自己要做什么。用一个一个的“部分”去“组合”我的的产品,这是一个很基本也很和逻辑的事情。我们的系统是部分开始先出现然后才出现我们的整体。

Allan的思想

        “但是预先形成的片段累加起来形成任何有自然特征的事物,是不可能的!”“如果各部分都是模块化的并且在整体构造出来之前被设计出来,那么按照定义,他们应该都是相同的模块。”

        理解:因为你没有理由认为它是不一样的模块,NotePad为例:Edit模块,通常的模块是含有:Copy,Insert,Delete...,如果你在整体没有构造出来之前你知道它还有什么功能要你实现吗?所以你也没有理由认为它是一个符合你系统的模块。也许你设计的NotePad还需要在Edit中加入对文档设计成只读模式,因为有的文件需要不被他人修改。由于你是在由部分来组合为整体,在没有弄清楚整体的具体需求,就开始设计模块,从部件开始出发,最后只能导致你的模块是不可用或者难以使用,借用当今流行词汇就是:不和谐。这里的和谐按照Allan的理解就是:“坚固而灵活的系统”

        整体思维:“我们的目标是在场景中设计片段--类和对象,为了创建坚固而灵活的系统,这些片段必须存在于场景之中。”意思就是我们用部分去组合整体通常是脱离我们应用的场景的,没有了场景,设计出来的东西就是平庸的,没有特色的,就像一个windows的notepad,除非你设计产品就是为了创造出另一个windows 的 notepad 而不是UltraEdit.
“结构的加入整体是对整体的操作,折叠实现的,而不是通过添加一个个部分来实现的。在区分的过程中,整体让部分诞生:整体和部分的结构同时出现”

“从最简单的角度观察问题,然后添加附加特征(差别),逐渐让我们的系统变得复杂。”

Allan提供了一条基于模式的思考途径:
♦1 为了理解所需要实现的目标,从对整体的概念性理解开始。
♦2 识别整体中出现的模式。
♦3 从为其他模式创建场景的模式开始。
♦4 应用这些模式。
♦5 对剩下的模式和中途发现的模式,重复步骤3~5。
♦6 最后每次一个地应用这些模式以创造场景,在这个场景中对设计进行精炼。

我是这样整体考虑MyNotePad:
1. 我需要一个可以编辑的NotePad---基本功能。可以设计出一个具有我们特色的编辑器。
    1a. 实现这个功能后就算是我们的Version1Bata.
    1b. 然后修改Bug等等,就是我们Version1,当然实际上没有那个记事本只有一个功能。例子而已。
2. 我们还需要编辑器能够查找,查找也是具有我们自己的一些特色的。
    2a. 实现这个功能后就算是我们的Version2Bata.
    2b. 然后修改Bug等等,就是我们Version2,当然实际上没有那个记事本只有一个功能。例子而已。
...........................................................
...........................................................
到我们系统完成。

《完》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值