用23种设计模式打造一个cocos creator的游戏框架----(二十二)原型模式

1、模式标准

模式名称:原型模式

模式分类:创建型

模式意图:用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象

结构图:

适用于:

1、当一个系统应该独立于它的产品创建、构成和表示时

2、当要实例化的类是在运行时刻指定时,例如,通过动态装载

3、为了避免创建一个与产品类层次平行的工厂类层次时。

4、当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们,可能比每次用合适的状态手工实例化该类更方便一些。

2、分析与设计

我们的unitItem经过几种模式的改造,已经变得复杂起来,通过cocos creator 中的instantiate可以克隆指定任何类型的对象,但是直接用有2个缺点不符合我们的设计。第一个是因为在unitItem中我们用享元模式使用了fighter。如果直接用instantiate一个新对象是他拥有的是一个新fighter,并没有共享内存。第二个是因为我们的游戏框架给每个unitItem都设置了个unitId。所以我们还需要原型模式来通过这个clone操作来优化上面2个问题,当然目前大部分工作也还是instantiate完成的。

另外目前抽象工厂方法 xhgame.itemFactory.createUnitItem('abc')创建的单位是一个原胚单位,一些属性需要后期set。通过clone方法可以方便很多。

意图:用原型实例指定创建对象的种类,并且通过复制(clone)创建新的对象

3、开始打造

item

TypeScript 复制代码
export interface IItem {
    itemNo: string
    reset(): void
    clone(): any
}

单位的克隆

TypeScript 复制代码
export class UnitItem  extends Component implements IItem, IUnitItem {

    ad: number = 100;
    mp: number = 0;
    // 攻击方式
    fighter: Fighter;
    private currentState: IUnitState = null;

    clone(): UnitItem<T> {
        // 克隆节点
        let cloneNode = instantiate(this.node);
        let clonedItem = cloneNode.getComponent(UnitItem)
        clonedItem.ad = this.ad;
        clonedItem.mp = this.mp;
        clonedItem.setFighter(xhgame.flyweightFactory.getFighter('jinchen_futou'))
        clonedItem.unitId = xhgame.itemFactory.getUnitItemId()
        return clonedItem;
    }
    .....

}

4、开始使用

TypeScript 复制代码
let unitItem = xhgame.itemFactory.createUnitItem('kuloubing')
unitItem.setFighter(xhgame.flyweightFactory.getFighter('jinchen_futou'));

let unitItem2 = unitItem.clone()
console.log('是否内存共享Fighter', unitItem.fighter === unitItem2.fighter) // 显示true
相关推荐
wanhengidc2 小时前
云手机能够流畅运行大型游戏吗
运维·服务器·游戏·智能手机·云计算
点金石游戏出海6 小时前
每周资讯 | 印度数字媒体与娱乐市场在2025财年达93亿美;《崩坏:星穹铁道》新版本登顶iOS畅销榜首
游戏·娱乐·媒体·游戏资讯·崩坏星穹铁道
勿忘初心9111 小时前
游戏手柄遥控越疆协作机器人[一]
游戏·机器人
全栈软件开发11 小时前
萌猫 合并卡牌 RPG抽卡游戏 Unity3D休闲益智游戏源码完整项目
游戏·unity源码
王道长服务器 | 亚马逊云13 小时前
AWS + 苹果CMS:影视站建站的高效组合方案
服务器·数据库·搜索引擎·设计模式·云计算·aws
在未来等你14 小时前
AI Agent设计模式 Day 1:ReAct模式:推理与行动的完美结合
设计模式·llm·react·ai agent·plan-and-execute
火鸟21 天前
给予虚拟成像台尝鲜版十,完善支持HTML原型模式
原型模式·通用代码生成器·给予虚拟成像台·给予·html原型模式·快速原型·rust语言
远程软件小帮手1 天前
好用的云电脑!手机怎么用UU远程云电脑玩电脑游戏?
运维·服务器·游戏·电脑
乐悠小码1 天前
Java设计模式精讲---03建造者模式
java·设计模式·建造者模式
yingxiao8881 天前
挖掘百亿“数字热土”!解读印度游戏与媒体娱乐的高速增长
游戏·娱乐·媒体