随笔分类 -  GOF

摘要:动机(Motivation) 在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系)而无法和任务的整体结构同时实现。 如何在确定稳定操作结构的前提下,来灵活应对各个子步骤的变化或者晚期实现需求? 意图(Intent 阅读全文
posted @ 2016-11-09 21:35 朴树的扑 阅读(276) 评论(0) 推荐(0)
摘要:直接与间接 人们对于复杂的软件系统通常由一种处理手法,即增加一层间接层,从而对系统获得一种更为灵活、满足特定需求的解决方案。 动机(Motivation) 在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者、或者系统 阅读全文
posted @ 2016-11-08 13:04 朴树的扑 阅读(255) 评论(0) 推荐(0)
摘要:系统的复杂度: 假设我们需要开发一个坦克模拟系统用于坦克车的各种作战环境中的行为,其中坦克引擎、控制器、车轮、车身等子系统构成。 方案: 动机(Motivation) 上述A方案的问题在于组件的客户和组件中各种复杂的子系统有了过多地耦合,随着外部客户程序和各子系统的演化,这种过多地耦合面临很多变化的 阅读全文
posted @ 2016-11-08 13:03 朴树的扑 阅读(327) 评论(0) 推荐(0)
摘要:面向对象的代价: 面向对象很好的解决了系统抽象问题,同时在大多数情况下,也不会损及系统的性能。但是,在某些特殊的应用中,由于对象的数量太大,采用面向对象会给系统带来难以承受的内存开销。比如图形应用中的图元等对象、字处理应用中的字符对象等。 动机(Motivation) 采用纯粹对象方案的问题在于大量 阅读全文
posted @ 2016-11-08 13:03 朴树的扑 阅读(203) 评论(0) 推荐(0)
摘要:问题的引入: 假如我们需要为游戏开发一种坦克,除了各种不同型号的坦克外,我们还希望在不同场合中为其增加以下一种或多种功能:比如红外线夜视功能,水陆双栖功能,卫星定位功能等等。 通过子类继承发现代码冗余太严重 动机(Motivation) 上述描述的问题根源在于我们“过度的使用了继承来扩展对象的功能” 阅读全文
posted @ 2016-11-07 17:15 朴树的扑 阅读(309) 评论(0) 推荐(0)
摘要:对象容器的问题: 在面向对象系统中,我们常会遇到一类具有“容器”特征的对象--即它们在充当对象的同时,又是其他对象的容器。 动机(Motivation) 上述描述的问题根源在于:客户代码过多地依赖于对象容器复杂的内部实现结构,对象容器内部实现结构(而非抽象接口)的变化将引起客户代码的频繁变化,带来了 阅读全文
posted @ 2016-11-07 12:51 朴树的扑 阅读(451) 评论(0) 推荐(0)
摘要:引入问题: 假如我们需要开发一个同事支持PC和手机的坦克游戏,游戏在PC和手机上功能都一样,都有同样的类型,面临同样的功能需求变化,比如坦克可能有多种不同的型号:T50,T75,T90... 但是PC和手机上的图形绘制、声效、操作等实现完全不同...因此对于各种型号的坦克,都要提供不同平台上的坦克实 阅读全文
posted @ 2016-11-07 10:23 朴树的扑 阅读(489) 评论(0) 推荐(0)
摘要:动机(Motivation) 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是环境要求的接口是这些现存对象不满足的。 如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口? 意图(Intent) 将一个类的接口转换成客 阅读全文
posted @ 2016-11-06 21:34 朴树的扑 阅读(310) 评论(0) 推荐(0)
摘要:依赖关系的倒置 抽象不应该依赖与实现细节,实现细节应该依赖与抽象。 -抽象A直接依赖与实现细节b -抽象A依赖与抽象B,实现细节b依赖与抽象B 动机(Motivation) 在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定 阅读全文
posted @ 2016-11-06 15:10 朴树的扑 阅读(388) 评论(0) 推荐(0)
摘要:动机(Motivation) 在系统中,经常面临着“某个对象”的创建工作;由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。 如何应对这种变化?如何提供一种“封装机制”来隔离出“这个易变对象”的变化,从而保持系统中“其他依赖该对象的对象”不随着需求改变而改变? 意图 阅读全文
posted @ 2016-11-06 10:41 朴树的扑 阅读(424) 评论(0) 推荐(0)
摘要:动机(Motivation) 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将他们组合在一起的算法却相对稳定。 如何应对这种变化》如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的 阅读全文
posted @ 2016-11-05 22:30 朴树的扑 阅读(266) 评论(0) 推荐(0)
摘要:动机(Motivation) 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列的对象的创建工作。 如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合? 意图(Intene 阅读全文
posted @ 2016-11-05 17:07 朴树的扑 阅读(363) 评论(0) 推荐(0)
摘要:动机(Motivation) 在软件系统中,经常有这样一些特殊的类,必须保证他们在系统中只存在一个实例,才能确保他们的逻辑正确性、以及良好的效率。 如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例? 这应该是设计者的责任,而不是使用者的责任。 意图(Intent) 保证一个类仅有一个实例, 阅读全文
posted @ 2016-11-05 09:36 朴树的扑 阅读(300) 评论(0) 推荐(0)
摘要:设计模式简介: 每个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。 Christopher Alexander 设计模式描述了软件设计过程中某一类常见问题的一般性的解决方案。 面向对象设计模式描述了面向对象设计过程中、特定场景下、类与相互通信的对象之间常见的组织关系。 设计 阅读全文
posted @ 2016-11-04 16:51 朴树的扑 阅读(417) 评论(0) 推荐(0)