加载中...
类型对象模式通过创建一个专门的类来表示对象的类型,让多种类型在运行时以数据形式定义,而非在编译期通过继承硬编码。它常用于游戏与配置驱动系统,支持不改代码就新增类型。

| 模式类别 | 对象行为型 |
| 又称 | Type Object |
| 核心角色 | 类型化对象、类型对象 |
| 典型领域 | 游戏、配置系统 |
| 相关模式 | 享元、原型 |
类型对象模式(Type Object)是一种允许在运行时灵活定义对象类别的设计模式,其核心是把原本要用子类表达的差异,改用一个独立的类型类的实例来表达,从而以数据驱动的方式扩展类型体系。
在传统面向对象设计中,不同种类的对象往往通过继承派生出多个子类。但当类别数量庞大且频繁变化时,类爆炸和重新编译会成为负担。类型对象模式引入两个角色:类型化对象和类型对象。前者持有对后者的引用,后者集中存放该类别共享的属性与行为。这样,新增一个类别只需创建一个新的类型对象实例,通常可以从配置文件或数据库加载。
该模式在游戏开发中极为常见,例如怪物有史莱姆、哥布林、巨龙等类别,每类共享血量、攻击、掉落表等定义,用类型对象承载即可通过策划表新增怪物而无需程序员改代码。在电商、内容管理等需要用户自定义品类的系统中,也常用它实现可配置的分类体系。
问:类型对象模式和继承有什么区别?答:继承在编译期固定类型层次,新增类型要写新类并重新编译;类型对象把类型变为运行时数据,能在不改动代码的前提下增删类别,更灵活但也失去了编译期的类型检查。
问:它和享元模式是什么关系?答:两者常配合使用。类型对象天然是被众多个体共享的,如果把这份共享数据做成不可变并复用一份实例,它就同时体现了享元模式共享内部状态的思想。

| 模式类别 | 对象行为型 |
| 又称 | Type Object |
| 核心角色 | 类型化对象、类型对象 |
| 典型领域 | 游戏、配置系统 |
| 相关模式 | 享元、原型 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧