当前位置: 首页 > news >正文

游戏开发中的设计模式

单例模式

实例化单一对象,懒加载

//单例模式
class GameManagerSingleton
{private constructor(){}private static instance:GameManagerSingleton;public static Instance(){if(!GameManagerSingleton.instance){this.instance = new GameManagerSingleton();}return this.instance;}Init(){}}GameManagerSingleton.Instance().Init();

代理模式

根据不同的代理者,具体化实际方法操作

//代理模式
interface ICall
{DealNum(x1:number,x2:number):number;
}class NPC1 implements ICall
{DealNum(x1: number, x2: number): number {return x1 + x2;}
}class NPC2 implements ICall
{DealNum(x1: number, x2: number): number {return x1 - x2;}
}class Person
{public delegate : ICall;public DealNum(x1,x2) : number{let retNum = this.delegate.DealNum(x1,x2);return retNum;}
}

观察者模式

设置观察者后,对象的变更会告知观察者


//观察者模式
interface IObserver
{nameChanged(newName);
}class Test implements IObserver
{//捕捉变化nameChanged(newName : string) {console.log("NewName:"+newName)}
}class People
{private name : string;/****/constructor() {this.name = ""}public get Name(){return this.name;}public set Name(value){if(this.name != value){this.name = value;//发生变化会向观察者发消息for(let observer of this.Observers){observer.nameChanged(this.name);}}}Observers : Array<IObserver> = new Array<IObserver>();
}let People1 = new People()
let observer1  = new Test()
//设置观察者
People1.Observers.push(observer1)
//改变对象
People1.Name = "Tom"

工厂模式

游戏中构建item群体的常用模式

enum CarType
{BMW,Benz,Audi,
}class Car 
{name : string;static CreateCar(type :  CarType){switch(type){case CarType.BMW:return new BMW();case CarType.Benz:return new Benz();}}
}class BMW extends Car
{/****/constructor() {super();this.name = "BMW"}
}
class Benz extends Car
{/****/constructor() {super();this.name = "Benz"}
}Car.CreateCar(CarType.Benz)
Car.CreateCar(CarType.BMW)
http://www.lryc.cn/news/188230.html

相关文章:

  • React核心原理与实际开发
  • Springboot+vue的企业OA管理系统(有报告),Javaee项目,springboot vue前后端分离项目。
  • 3、字符设备驱动框架和开发步骤
  • [MySQL]基础篇
  • Meta Semantic Template for Evaluation of Large Language Models
  • Git相关知识(1)
  • pytorch中nn.DataParallel多次使用
  • 制作电商页面(Html)
  • Android Sutdio依赖Snapshot版本,无法同步最新的包
  • Feign调用异常触发降级捕获异常
  • Springboot 音乐网站管理系统idea开发mysql数据库web结构java编程计算机网页源码maven项目
  • 微信支付v2-02
  • 企业的销售活动是什么?CRM销售管理系统给你答案
  • 【PG】PostgreSQL参数格式 配置文件格式
  • 应用层协议 HTTP
  • Springboot+vue的应急救援物资管理系统,Javaee项目,springboot vue前后端分离项目。
  • 创建properties资源文件,并由spring组件类获取资源文件
  • 你知道npm、yarn、pnpm的区别吗?
  • 利用excel表格进行分包和组包
  • Go 语言切片扩容规则是扩容2倍?1.25倍?到底几倍
  • 突破封锁|华为芯片10年进化史:从K3V1到麒麟9000S
  • vue建项目
  • 天龙八部服务端Public目录功能讲解
  • 好用的Java工具类库—— Hutool
  • IDEA的使用(三)Debug(断点调试)(IntelliJ IDEA 2022.1.3版本)
  • 285_C++_web提取AI告警信息JSON格式
  • (Qt5Gui.dll)处(位于 xxx.exe 中)引发的异常: 0xC0000005: 读取位置 XXXXXXXX 时发生访问冲突
  • AI:11-基于深度学习的鱼类识别
  • c#学习系列相关之多线程(三)----invoke和begininvoke
  • 如何使用 ONLYOFFICE API 转换办公文档格式