敏捷开发读书笔记五

敏捷开发读书笔记五

command模式

类图先行
类图

templete method(模板方法)模式和strategy(中介者)模式

  • 优先使用对象组合而不是类继承(老生常谈的问题)
  • 模板方法模式和策略模式体现了继承和委托之间的区别.他们要解决的问题类似,但是模板方法模式利用继承解决问题,策略模式利用委托来解决问题

模板方法模式

类图先行
类图

策略模式

类图先行
类图

  • 模板方法和策略模式都可以用来分离高层算法和低层具体实现细节.都允许高层的算法独立于它的具体实现细节重用.

facade(外观)模式和mediator(中介者)模式

  • 这两种模式都是把某种策略施加到另一组对象上,facade模式从上面施加策略,mediator模式从下面世家策略
  • 如果策略涉及范围广泛而且课件,可以使用facade模式从上面世家策略.如果策略隐藏并且具有针对性,mediator则是更好的选择.
  • facade通常是约定的关注点,每个人都去使用facade而不关心其下隐藏的对象.mediator则对用户是隐藏的.他的策略是既成事实而非一项约定事务.

facade模式

类图先行
类图

  • facade对用户隐藏了下层的复杂性,并且与用户约定必须通过facade来操作下层的操作而不能绕过.
  • facade模式是明显且受限的施加策略.

mediator模式

类图先行
类图

  • mediator模式以隐藏且不受限的方式来施加策略.

singleton模式(单例)和monostate模式

  • singleton和monostate都有单一的含义.singleton通过将构造函数私有化来维持单一实例,monostate通过将所有字段注册为静态字段(static)来保证所有实例都是统一状态.
  • 多数情况下,这两种模式的实施代价远低于它们的表达力带来的收益.
  • sigleton强调结构上的单一性,只能创建一个实例.monostate强调行为上的单一性,所有实例操作的都是同一字段.
  • 如果希望通过派生去约束一个现存类,并且不介意他的所有调用者都必须调用instance()方法来获取访问权,那么singleton最合适的.
  • 如果希望类的单一性本质对使用者透明,或者希望使用单一对象的多态派生对象,那么monostate最合适.

singleton模式

优点:

  • 跨平台
  • 适用于任何类(只需要将构造函数私有并添加相应的static函数和变量)
  • 可以通过派生创建(可以创建一个给定类的sigleton子类)
  • 延迟求值(sigleton未使用的时候就不需要创建)

缺点:

  • 摧毁方法未定义
  • 不能继承(singleton派生的子类不是sigleton)
  • 效率问题(instance方法中的if)
  • 不透明性(使用者知道操作的是sigleton对象)

monostate模式

优点:

  • 透明性(使用者不知道操作的是monostate对象)
  • 可派生性(monostate所有的派生类都是monostate)
  • 多态性(monostate的派生类可以overwrite父类的方法)

缺点:

  • 不可转换性(普通类不能转换成monostate)
  • 效率问题
  • 内存占用(static变量,即使没有使用,也会占用内存)
  • 平台局限性

null object模式

定义一个接口,实现接口时候分为null实现和implementation实现,当出现null情况的时候,返回null实现,从而避免琐碎的判空代码.

null object的实现代价要高于它的收益.好像陷入了复杂性的badsmell?