设计模式-游戏中常用哪些设计模式呢?

设计模式-游戏中常用哪些设计模式呢?

夜无邪 发布于 2016-11-25 字数 66 浏览 1019 回复 3

请列举3个以上设计模式在游戏中的应用场景、用这种模式的好处。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

虐人心 2017-05-25 3 楼

1、观察者模式(Observer)。
好处:降低代码的耦合度。
应用:比如有个应用,玩家强化装备需要用到强化石,强化石数量不足时就不能强化,强化石可以从商城里购买到。这时候,就可以对玩家的物品增加Observer,当物品数量发生变化,就可以把这种变化通知到相应的应用中。

2、单例模式(Singleton)。
好处:确保类只有一个实例,并且对该实例提供全局访问。
应用:有玩家信息的类Player,该类整个游戏中只会出现一个实例,因此可以设计成单例模式。

3、对象池模式(Object Pool)。
好处:通过回收利用对象避免获取和释放资源所需的昂贵成本。
应用:比如有动画类Animation,当动画播放结束后,将对象放入对象池,以便下次可以进行复用,避免了多次new操作。

书上说对象模式是预先创建固定数量的对象,如果所有对象都被占用,后续请求被终止或者等待。这与我常用的对象池有些差别,我一般流程是先从对象池中取对象,如果没有取到就直接创建,用完后再放入到池子中。

灵芸 2017-04-24 2 楼

BUILDER
建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。

FACTORY METHOD
工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。

PROTOTYPE

工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。

ADAPTER
适配器模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。适配类可以根据参数返还一个合适的实例给客户端。

BRIDGE
桥梁模式:将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以独立的变化。

COMPOSITE
合成模式:合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。

DECORATOR
装饰模式:装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案,提供比继承更多的灵活性。动态给一个对象增加功能,这些功能可以再动态的撤消。增加由一些基本功能的排列组合而产生的非常大量的功能。

FACADE
门面模式提供一个高层次的接口,使得子系统更易于使用。每一个子系统只有一个门面类,而且此门面类只有一个实例,也就是说它是一个单例模式。但整个系统可以有多个门面类。

PROXY
代理模式可以并不知道真正的被代理对象,而仅仅持有一个被代理对象的接口,这时候代理对象不能够创建被代理对象,被代理对象必须有系统的其他角色代为创建并传入。

INTERPRETER
解释器模式将描述怎样在有了一个简单的文法后,使用模式设计解释这些语句。在解释器模式里面提到的语言是指任何解释器对象能够解释的任何组合。在解释器模式中需要定义一个代表文法的命令类的等级结构,也就是一系列的组合规则。每一个命令对象都有一个解释方法,代表对命令对象的解释。命令对象的等级结构中的对象的任何排列组合都是一个语言。

灵芸 2016-12-23 1 楼

补充几条

1.迭代器Iterator模式
提供一个方法,对一个组合聚合对象内各个元素进行访问,同时又不暴露该对象类的内部表示。

2.访问者模式Visitor
当我们希望对一个结构对象添加一个功能时,我们能够在不影响结构的前提下,定义一个新的对其元素的操作。(实际上,我们只是把对该元素的操作分割给每个元素自身类中实现了而已),但是,访问者破坏了OO思想的。

3.抽象工厂模式AbstractFactory

封装出一个接口,这个接口负责创建一系列互相关联的对象,但用户在使用接口时不需要指定对象所在的具体的类。例如,在音频方面,一个音频的抽象工厂派生出不同的工厂,有音乐工厂,音效工厂。音效工厂中又有一个创建3D音效节点的方法,一个创建普通音效节点的方法。最终使用者只需要SoundFactory.Create3DNode( pFileName );就可以创建一个节点了。