2014年9月18日~2014年9月19日(将所有这些放在一起:用模式的方法思考)

  • 第四篇  将所有这些放在一起:用模式的方法思考
  • 第11章 专家如何进行设计
  1. Alexander的方法是“将注意力集中在高层关联上”
  2. 设计常常被想成一个“合成”的过程。。。。“整体”是由“部分”组合在一起而创建的。。。
  3. 但是在将这些片段组合在一起之后。。。再将注意力从局部转移到整体的时候,大家都会潜移默化地去考虑实现。。。对吧?  人的懒惰所致。。。
  4. Alexander的观点:从片段开始建设不是一个好的设计方法
  5. 如果我们在拥有宏观视图之前就开始设计模块,这些模块就将是相同的,因为根本没有任何理由让它们显得不同。
  6. 根据在整体中的位置来定义每个部分,只有这样才可能让建筑物变得适合居住(坚固而灵活的系统)。
  7. 每个部分都根据其在更大的整体环境中的存在而有其特定的形式。
  8. 错误软件开发方式:立即寻找对象、类和组件,然后考虑它们怎么彼此适应。
  • 第12章  用模式解决CAD/CAM问题
  1. 问题回顾:为一个庞大的工程组织提供支持的计算机系统。。。
  2. 基本需求:创建一个计算机程序,它能读取一个CAD/CAM数据集并从中提取不见,一个现有的专家系统需要这些部件才能进行智能设计。这个系统应该向CAD/CAM系统屏蔽专家系统。复杂的是,CAD/CAM系统正处于变化之中。。。可能还有多个潜在版本。。。专家系统需要拥有它们的接口。。。
  3. (Geometry Extractor:几何抽油烟机)
  4. 你已经学了几个模式,也知道Alexander的设计哲学:从宏观视图开始,然后添加细节。。。。
  5. 我们步骤如下:
    • 发现我们在问题领域中拥有的模式。这些是需要分析的模式。。。
    • 对于这些需要分析的模式,做下列工作:
      • 挑出为其他模式提供最多场景的模式。
      • 在我的概念性最高的设计中使用这个模式。
      • 识别任何可能已经出现的附加模式。将它们添加到“需要分析的模式中”。
      • 对于需要分析而还未分析的模式,重复上述过程。
    • 按照需求将细节添加到设计中。拓展方法和类定义。
  6. 第一步(发现模式):Abstract Factory(你需要为特定的客户(或情况)提供特定系列的对象)  Adapter(将一个无法控制的现有对象(XXCircle)与一个特定的接口想匹配) Bridge(将一组实现部分从另一组使用它们的对象中分离出来) Facade(希望简化现有系统的使用方法。你需要定义自己的接口) 。。。。对于其他未出现的模式,待续。。。
  7. 第二步(分析模式):
    • “挑出为其他模式提供最多场景的模式”
      • “场景”:一些事物存在或发生的相互关联的状态
      • 在设计过程中,尽量减少脑子里考虑的事情的数量。过早的考虑会起反作用。更好的方式是:在我知道需要实例化哪些对象之前,不考虑对象的实例化。。。经验之谈啊。。。考虑你在系统需要什么,然后再关心如何实现它。。。
      • 实际上,Abstract Factory模式将是我们使用的最后一个模式(除非在我们最初的设计中又出现另外的创建型模式)。。。
      • 很明显:Bridge 和 Adapter模式之间有关联。。。
      • 最高级模式(为其他模式确定场景的一个或两个模式)约束其他的模式。。。
      • 还在考虑范围内的3中模式配对:
      • Adapter-Bridge Bridge-Facade Facade-Adapter
      • Adapter模式为了Bridge模式提供实现部分的接口。。。所以Bridge模式为Adapter模式创造了场景。。。同样Bridge也为Facade模式创造了场景
      • 所以,Bridge模式是胜利者。。。
    • “在我的概念性最高的设计中使用这个模式”

      • 让专家使用Model类来获取他需要的信息。。。
      • 而Model对象由Feature对象组成。。。
      • Feature类就是Bridge模式中的Abstraction,而V1、V2系统就是Implementation。
    • 识别任何可能已经出现的附加模式。将它们添加到“需要分析的模式中”。
      • v1Facade中的每个方法都像是对v1系统的一系列函数调用
    • 对于需要分析而还未分析的模式,重复上述过程
      • 在使用玩Facade模式之后,现在我们使用Adapter模式
      • (回顾:v1系统无面向对象设计,v2系统有面向对象设计)
      • Abstract Factory模式运用到了。。。Model设计(自我认为哈)
    • 按照需求将细节添加到设计中。拓展方法和类定义。
      • 省略。。。
  8. 图12-11上的解决方案:Feature对象可能是沟槽部件、孔部件、方块部件。。。沟槽部件可能是v1沟槽,v2沟槽。。。不够透明。。。而图12-12上的解决方案克服了这一点,并且维护成本不会超过前面的。。。因为,第三行的类不会爆炸。第三行的类都是只用了自己的版本。。。如果不是这样,那么Bridge模式便能够起作用(见前面Bridge)
  • 第13章 设计模式的原则和策略
  1. 学习设计模式的另一种方法是学习它们的机制,以及作为它们基础的原则和策略。学习这些将提高你作为一个分析者和设计者的能力。(这些才是最本质的东西)
  2. 开放-封闭原则
  3. 软件的拓展引入此原则。
  4. 模块、方法和类应该对类拓展是开放的,而对更改是封闭的。
  5. 目标:我们可以再不修改代码的前提下对我们的软件进行拓展。
  6. 例如:Bridge模式中就很有可能在不修改任何现存的类的前提下加入新的实现部分。
  7. 从场景进行设计原则
  8. 在设计我们的片段出现的细节之前先创建整体视图。。。
  9. Bridge模式中,在决定如何设计Implementation类时,先考虑它们的场景:Abstraction的派生类使用它们的方式。
  10. 举个例,我们需要在不同的硬件上画不同的几何形状的程序。。。从场景进行设计意味着我们应该首先观察我的形状的需求,也就是说,我将必须画什么?
  11. 通过帮助我们从场景进行设计,这些模式让我可以预见到可能的变化点。(形状和硬件)
  12. 包容变化原则
  13. 作者的设计目标:决不让一个类包含两件变化并以某种方式耦合在一起
  14. Bridge模式:实现部分各不相同,只要接口一样。那么新的实现部分就能被接纳。
  15. Abstract Factory模式:这个模式有很难多实现方式。即便选择了一种,后面也可以不改变实现,而切换到另一种。
  16. Adapter和Facade我就不多讲了。。。
  17. 模式不仅仅是包容变化。它们还识别变化之间的关联。。。
posted @ 2014-09-18 16:51  何人之名  阅读(134)  评论(1)    收藏  举报