Brief | 概要
建造者模式是一种创建型设计模式, 使你能够分步骤创建复杂对象。 该模式允许你使用相同的创建代码生成不同类型和形式的对象。
建造者模式关注如何逐步创建一个复杂的对象,可以分步骤生成对象, 而且允许你仅使用必须的步骤。 应用该模式后, 你再也不需要将几十个参数塞进构造函数里啦。
The Question | 需求
我的游戏里有两种类型的角色,分别是Monster和Pet。
他们都由如下部件组成:
- AI,由AIFactory提供,Monster是MonsterAI,Pet是PetAI
- Weapon | 武器,如果weaponId == null,则不添加武器组件
- OnClickBehaviour | 点击后的响应脚本
- Bag | 背包,Pet有背包,Monster没有背包。
- Monster有属性HP,MP,HPMax,MPMax,ID,WeaponId
- Pet有属性ID,followTransform
想想你会怎么写?
Bad Code Example | 差代码
如果不用设计模式,代码应该是这样的。
// Bad Code
// 生成一个Monster,没有武器
GameObject gameObject = LoadModel("Prefabs/Monster", "monster_1001");
Monster monster = gameObject.AddComponent<Monster>();
monster.hp = 100;
monster.maxHp = 100;
monster.mp = 0;
monster.maxMp = 50;
gameObject.AddComponent<MonsterAI>();
gameObject.AddComponent<OnClickBehaviour>();
// 生成Monster_1002,携带武器weapon002
GameObject gameObject2 = LoadModel("Prefabs/Monster", "monster_1002");
Monster monster2 = gameObject2.AddComponent<Monster>();
monster.hp = 100;
monster.maxHp = 100;
monster.mp = 20;
monster.maxMp = 50;
gameObject2.AddComponent<MonsterAI>();
gameObject2.AddComponent<OnClickBehaviour>();
Weapon weapon = gameObject2.