案例: 某即时战略游戏,你训练出来各种很强的战士. 为了增加游戏的可玩性,增加了一种复制魔法.实施该魔法,可以复制任意的战士. 你会怎样考虑这个设计? 在继续阅读之前,请先认真思考并写出你的设计,这样对你更好地理解本模式将会更有帮助. 分析: 1.无疑增加一个复制的方法能解决这个问题. 2.专门写一个复制类吗?传入一个战士,然后返回一个复制的战士,这样可行吗?这样做有以下问题:    1)游戏还在设计中,战士的品种还会不断演变,每增加一个品种,或者修改某品种的战士,复制类就需要修改代码.    …
某赛车游戏,玩家可以选择不同的车,这些车其实是采用不同性能的配件组成的,如:车胎.发动机等. 玩家选择一部车,其实就是new了一部车. 你如何考虑“new car”的代码? 要new这个车,可能需要先new出车的各个配件,然后将这些配件组合成car. 某些复杂对象要new出来时,往往需要先new出它的子对象,然后组装成进父对象中,这些子对象有时候甚至组成了“树”结构. 生成器模式就是用来解决这问题的. 赛车游戏用生成器的解决方案: CAR_Builder定义了增加车组件的几个方法,还有Creat…
):建造者模式(Builder Pattern)    .建造者模式的使用使得产品的内部表象可以独立的变化.使用建造者模式可以使客户端不必知道产品内部组成的细节. 2.每一个Builder都相对独立,而与其它的Builder无关. 3.可使对构造过程更加精细控制. 4.将构建代码和表示代码分开. 5.建造者模式的缺点在于难于应付"分步骤构建算法"的需求变动. 适用性.需要生成的产品对象有复杂的内部结构. 2.需要生成的产品对象的属性相互依赖,建造者模式可以强迫生成顺序. 3. 在对象创…
要看懂设计模式,你需要懂类图(Class Diagram),也需要懂一点对象图(Object Diagram),下面介绍一些UML的必要知识,以便你学习设计模式. 属性.操作 下图简单介绍类的属性和操作. 类有属性(attributes).操作(operations),属性和操作统称特性(features). 下载 (40.26 KB) 7 分钟前 下图进一步详细介绍类图细节,包括:属性和操作的作用域.属性类型.参数类型.方法返回值类型等. 下载 (74.42 KB) 12 分钟前 接口.枚举…
在Windows程序中,有时候界面控件之间的交互会很麻烦,如:A控件显示什么的时候,B控件要显示什么,另外C控件要不可用,同样其它控件也会有类似的复杂要求.控件与控件之间很容易形成复杂的多角关系了.现在让你来梳理这些多角关系,你会咋办? 蜘蛛网般的多角关系是很麻烦,所有麻烦最好通过一个中间人来解决,这就是中介者模式的核心思想. 应用了中介者模式的解决方案如下: 说明:1.每个控件不需要直接和别的控件打交道,只需要知道中介者就可以了.2.每个控件都需要保持保持中介者的引用,而中介者不一定需要保持每…
一个国家有多个皇帝这种情况有没有?还确实有,就出现在明朝,那三国期间的算不算,不算!因为各自称帝,各有各的地盘,国号不同.大家还记得那首诗<石灰吟>吗?作者是谁?于谦,他是被谁杀死的?明英宗朱祁镇,对,就是那个在土木堡之变中被瓦刺俘虏的皇帝,被俘虏后,他弟弟朱祁钰当上了皇帝,就是明景帝,估计当上皇帝后乐疯了,忘记把老哥朱祁镇削为太上皇了,于是在中国的历史上就这个时期是有2个皇帝.这期间的大臣很郁闷,两个皇帝耶,两个精神依附对象.这个场景放到我们设计模式中就是叫有上限的多例模式(没上限的多例模式…
概述 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定.如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?这就是要说的建造者模式. 本文通过现实生活中的买KFC的例子,用图解的方式来诠释建造者模式. 意图 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表…
1.概述 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示,这就是建造者模式. 简单的说就是生产一个产品的步骤比较稳定,单个步骤变化会产生一个不同的产品. 2.实践 物理模型 建造者模式的例子很多,如肯德基套餐,游戏角色人物等等.前一段时间同事辞职去开了一家米线店,开张时我们这些同事都去捧场了,免费午餐,随我们点,菜单发现并不多,只有几种类型的米线,酸辣米线,杂酱米线. 谈话中米线做法,他说相当简单,一开始慢慢试,调出味道,成熟后然后把各个配料的量纪录下来,这样就成为一道米线…
概述 在 软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧 烈的变化,但是将它们组合在一起的算法确相对稳定.如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的 “稳定构建算法”不随着需求改变而改变?这就是要说的建造者模式. 本文通过现实生活中的买KFC的例子,用图解的方式来诠释建造者模式. 意图 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不…
设计模式之序-UML类图那点事儿 序 打14年年底就像写那么一个系列,用于讲设计模式的,代码基于JAVA语言,最早接触设计模式是大一还是大二来着,那时候网上有人给推荐书,其中就有设计模式,当时给我推荐的书我还隐约记得,叫GoF的,书名是<Design Patterns: Elements of Reusable Object-Oriented Software>,也即<设计模式>,机械出版社的将其翻译为<设计模式-可复用面向对象软件的基础>.至于为什么叫做GoF,那时候…