Head First 设计模式: 第13课 与设计模式相处

“每一个模式描述了一个在我们周围不断重复发生的问题以及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。” ── 建筑家 Christopher Alexander

模式 是在某情境 (context) 下,针对某问题的某种解决方案。

  • 情境 就是应用某个模式的情况。这应该是会不断出现的情况。
    [ 我要如何准时上班? ]
  • 问题 就是你想在某情境下达到的目标,但也可以是某情境下的约束。
    [ 我将钥匙锁在车里了。]
  • 解决方案 就是你所追求的: 一个通用的设计,用来解决约束,达到目标。
    [ 打破窗户,进入车内,启动引擎,然后开车上班。]
  • 成本 解决方案所花费的才力 (财力)。
    [ 窗户的价值。]

模式是解决问题的方法,用于不用无所谓; 但当我们应用模式时,就应该考虑怎么才能更好的解决问题 (反之,去除模式)。

阅读完整的文章… »

LD on 09月 22nd, 2008 | File Under 设计模式 | 1 Comment -

Head First 设计模式: 第12课 复合模式

模式的模式:

  • 模式通常被一起使用,并被组合在同一个设计解决方案中。
  • 复合模式在一个解决方案中结合两个和多个模式,以解决一般或重复发生的问题。

MVC (Model-View-Controller) : 模型利用“观察者”让控制器和视图可以随最新的状态改变而更新。另一方面,视图和控制器则实现了“策略模式”。控制器是视图的行为; 视图内部使用组合模式来管理显示组件。

FleaPHP 的MVC解释图 很好的标示了这种模式:
阅读完整的文章… »

LD on 09月 20th, 2008 | File Under 设计模式 | No Comments -

Head First 设计模式: 第11课 代理模式

OOP村齐家的少爷喜欢上了尹家的小姐,但有鉴于礼法,双方长辈反对, 两个年轻人不能长时间见面。于是齐少爷的书童 和 尹小姐的丫环当起了连络人。 尹小姐想多了解齐少爷,派丫环去探探舌漏,丫环找到从小就跟着齐家少爷的书童,书童乘机说尽好话…… [ 这里丫环就是小姐的代理; 小姐要了解少爷,所以小姐是客户对象,丫环是客户辅助对象,书童是服务辅助对象,少爷是服务对象; 这个模式叫远程代理。]

齐少爷和尹小姐书信来往好久了,齐少爷记不得以前写过什么良言美句,书童会意,把保存的书信拿了出来参考。[ 书童就好比缓存代理 ]

齐家毕竟是大户人家,也指望齐少爷他日金榜题名,齐老太太天天来检查齐少爷的读书情况。这天少爷溜出去与尹小姐私会,书童穿了少爷的衣服在窗后装模作样,老太太看到窗影很高兴。 [ 虚拟代理 ]

书童身材和少爷还是比较相似的,少爷毕竟是老爷的儿子,萧峰和萧远山也很难分清的。 这天,齐老爷有点喝高了,想去留香院找小春,想起了儿子(老不正经!),于是和书童(正扮演少爷)说: 今天你扮成我,你的事过几天我做主。 于是书童又穿上老爷的衣服,贴上胡子,还有模有样。 [ 装饰者模式: 川剧《变脸》 == 本体就是那个,但外表已经改变。 ]

阅读完整的文章… »

LD on 09月 16th, 2008 | File Under 设计模式 | 1 Comment -

Head First 设计模式: 第十课 状态模式

状态模式: 允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。
——> 策略模式: 由客户主动指定context对象所要组合的策略对象是哪一个。

  • 把各个状态分别继承于状态接口, 并得到上下文类对象;
  • 在上下文类中,所有的状态都在构造器(主类)中创建并赋值, 配合函数处理状态(调用状态对象);
  • 当前状态在状态对象集合中游走改变,以反应出context内部的状态,因此,context的行为也会跟着改变。(由上下文类和当前状态决定之后状态)

阅读完整的文章… »

LD on 09月 13th, 2008 | File Under 设计模式 | No Comments -

Head First 设计模式: 第九课 迭代器

迭代器模式: 提供一种方法顺序访问一个聚合对象中的各个元素(不必在意其数据结构),而不是暴露其内部的表示。
(适配器??相似,一个聚合对象,一个连接多个类)

组合模式: 允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。
(叶子节点、组合节点!有点头晕,回想起当年C++时的无穷指针恐惧症)

设计原则: 一个类应该只有一个引起变化的原因。── 内聚

阅读完整的文章… »

LD on 09月 10th, 2008 | File Under 设计模式 | 2 Comments -