摘要: 状态模式 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。它有两种使用情况: (1)一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为。 (2)一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。示例 本文的例子为第一种情... 阅读全文
posted @ 2015-11-15 19:35 蚂蚁吃大象、 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 观察者模式 定义对象间的 一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。它还有两个别名,依赖(Dependents),发布- 订阅(Publish-Subsrcibe)。示例 可以举个博客订阅的例子,当博主发表新文章的时候,即博主状态发生了改变,那些... 阅读全文
posted @ 2015-11-15 19:33 蚂蚁吃大象、 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。示例 考虑员工要求加薪。公司的管理者一共有三级,总经理、总监、经理,如果一个员工要求加薪,应该向主管的经理申请,如果加薪的数量在经理的职权 ... 阅读全文
posted @ 2015-11-15 19:28 蚂蚁吃大象、 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 中介者模式 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式的例子很多,大到联合国安理会,小到房屋中介,都扮演了中间者的角色,协调各方利益。示例 本文就以租房为例子,如果没有房屋中介,那么房客要自己找房东,而... 阅读全文
posted @ 2015-11-15 19:24 蚂蚁吃大象、 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 备忘录模式 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态示例 玩游戏时都会保存进度,所保存的进度以文件的形式存在。这样下次就可以继续玩,而不用从头开始。这里的进度其实就是游戏的内部状态,而这里的文件相当于是在游戏之外保存状态... 阅读全文
posted @ 2015-11-15 19:19 蚂蚁吃大象、 阅读(435) 评论(0) 推荐(0) 编辑
摘要: 装饰模式 时常会遇到这样一种情况,我已经设计好了一个接口,并且也有几个实现类,但是这时我发现我设计的时候疏忽了,忘记了一些功能,或者后来需求变动要求加入一 些功能,最简单的做法就是修改接口,添加函数,然后继承类中都相应的添加实现,这样做倒也没什么问题,但是如果这种变化来个好几次或者继承类非常多,那... 阅读全文
posted @ 2015-11-15 19:01 蚂蚁吃大象、 阅读(269) 评论(0) 推荐(0) 编辑
摘要: 桥接模式 将抽象部分与它的实现部分分离,使它们都可以独立地变化。适用性: 1.当一个对象有多个变化因素的时候,考虑依赖于抽象的实现,而不是具体的实现。如上面例子中手机品牌有2种变化因素,一个是品牌,一个是功能。 2.当多个变化因素在多个对象间共享时,考虑将这部分变化的部分抽象出来再聚合/合成进... 阅读全文
posted @ 2015-11-15 18:18 蚂蚁吃大象、 阅读(354) 评论(0) 推荐(0) 编辑
摘要: 享元模式 运用共享技术有效地支持大量细粒度的对象。 享元对象能做到共享的关键是区分内蕴状态(InternalState)和外蕴状态(ExternalState)。 内蕴状态是存储在享元对象内部并且不会随环境改变而改变。因此内蕴状态并可以共享。 外蕴状态是随环境改变而改变的、不可以共享的状态。... 阅读全文
posted @ 2015-11-15 18:02 蚂蚁吃大象、 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 代理模式 为其他对象提供一种代理以控制对这个对象的访问。 主要解决的问题是:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或 者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦... 阅读全文
posted @ 2015-11-15 17:07 蚂蚁吃大象、 阅读(241) 评论(0) 推荐(0) 编辑