原型模式:基于类的设计方案最终会出现
与面向过程相比面向对象的特性是将状态(数据)和行为(逻辑)绑定在一起,基于类的OOP设计方案会有些令人不舒服的设计
引用场景:规避代码冗余,简化行为操作
例子:
<-符号表示继承
class Monster { //... }; class Ghost : public Monster {}; class Demon : public Monster {}; class Sorcerer : public Monster {};
class Spawner { public: virtual ~Spawner() {} virtual Monster* spawnMonster() = 0; }; class GhostSpawner : public Spawner { public: virtual Monster* spawnMonster() { return new Ghost(); } }; class DemonSpawner : public Spawner { public: virtual Monster* spawnMonster() { return new Demon(); } }; // 你懂的
提供一个生成器:
typedef Monster* (*SpawnCallback)(); class Spawner { public: Spawner(SpawnCallback spawn) : spawn_(spawn){} Monster* spawnMonster() { return spawn_(); } private: SpawnCallback spawn_; };
这个例子感觉太模糊了 大多数人绝对不会蠢到用上面的方式创建对象
复制一段出自游戏编程模式这本书的原文拓展一下对原型的感受: