类型对象
类型对象模式
定义一个类型对象类和一个持有类型对象类。每个类型对象的实例表示一个不同的逻辑类型。每个持有类型对象类的实例引用一个描述其类型的类型对象。
实例数据被存储在持有里类型对象的实例中,而所有同概念类型所共享的数据和行为被存储在类型对象中。引用同一个类型对象的对象之间能表现出“同类”的性状。
- 如何理解:类型对象模式其实就是手动实现继承,C++中虚函数表其实就是我们的类型对象类,C++是类型对象模式在C上的应用,由编译器自动处理。
使用场合
当需要定意思一系列不同种类的东西,但是不希望把种类硬编码进你的类型系统时,本模式都适用。尤其是当下面任何一项成立的时候:
- 你不知道将来会有什么类型(例如,游戏需要支持包含新怪物品种的DLC下载)。
- 你需要在不重新编译或修改代码的情况下,修改或添加新的类型。
设计技巧
- 通过类型对象的指定函数直接创建持有类型对象,类似工厂模式。
- 类型对象里也可以通过继承来共享数据,但是不是通过语言本身的继承机制,而是自己手动实现。(P183)