gof-原型模式

原型模式:基于类的设计方案最终会出现 

  与面向过程相比面向对象的特性是将状态(数据)和行为(逻辑)绑定在一起,基于类的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_;
};

这个例子感觉太模糊了  大多数人绝对不会蠢到用上面的方式创建对象

复制一段出自游戏编程模式这本书的原文拓展一下对原型的感受:

 

posted on 2019-08-10 21:01  深秋大街道  阅读(155)  评论(0编辑  收藏  举报

导航