摘要: (虚函数的晚绑定,简单但是重要)变与不变变化---是软件设计永恒的主题,如何管理变化带来的复杂性?设计模式的艺术性和复杂度就在于如何分析,并发现系统中的变化点和稳定点,并使用特定的设计方法来应对这种变化。动机(Motivation)在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却又很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系)而无法和任务的整体结构同时实... 阅读全文
posted @ 2010-01-05 23:17 疯狂的咸鱼 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 直接与间接人们对于复杂的软件系统常常有一种处理手法,即增加一层间接层,从而对系统获得一种更为灵活、满足特定需求的解决方案。动机(Motivation)在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者、或者系统结构带来很多麻烦。意图(Intent)为其他对象提供一种代理以控制对这个对象的访问 ---《设计模式》Go... 阅读全文
posted @ 2010-01-05 00:56 疯狂的咸鱼 阅读(406) 评论(2) 推荐(1) 编辑
摘要: 系统的复杂度需要开发一个坦克模拟系统用于模拟坦克车在各种环境中的行为,其中坦克系统由引擎、控制器、车轮、车身等各子系统构成。 public class Wheel { public void WAction1() { } public void WAction2() { } } public class Bodywork { public void BAction1() { } public vo... 阅读全文
posted @ 2010-01-05 00:54 疯狂的咸鱼 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 子类复子类,子类何其多假如我们需要为游戏开发一种坦克,除了各种不同型号的坦克外,我们还希望在不同场合下为其为其增加一种或多种功能:比如红外线夜视功能,比如水陆两栖功能,比如卫星定位功能等等。 //抽象坦克 public abstract class Tank { public abstract void Shot(); public abstract void Run(); } //各种型号 pu... 阅读全文
posted @ 2010-01-05 00:53 疯狂的咸鱼 阅读(301) 评论(0) 推荐(0) 编辑
摘要: 对象容器的问题在面向对象系统中,我们常会遇到一类具有"容器"特征的对象---即它们在充当对象的同时,又是其他对象的容器。代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--publicinterfaceIBox{}publicclassSingleBo... 阅读全文
posted @ 2010-01-05 00:50 疯狂的咸鱼 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 抽象不应该依赖于实现细节,实现细节应该依赖于抽象抽象B --- 稳定实现细节b --- 变化问题在于如果抽象B由于固有的原因,本身也不稳定,也有可能变化、怎么办?举例来说假如我们需要开发一个同时支持PC和手机的坦克游戏,游戏在PC和手机上功能都一样,都有同样的类型,面临同样的功能需求变化,比如坦克可能有多种不同的型号:T50,T75,T90...对于其中的坦克设计,我们可能很容易设计出来一个Tan... 阅读全文
posted @ 2010-01-05 00:45 疯狂的咸鱼 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 结构型模式 --- 处理类组合的问题适配,即在不改变原有实现基础上,将原先不兼容的接口转换为兼容的接口。动机(Motivation)在软件系统中,由于应用环境的变化,常常需要将"一些现存的对象"放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。如何应多这种"迁移的变化"?如何既能利用现有对象的良好表现,同时又能满足新的应用环境所要求的接口?将一个类的接口转换成客户希望的另一个接口。... 阅读全文
posted @ 2010-01-05 00:40 疯狂的咸鱼 阅读(271) 评论(0) 推荐(0) 编辑