为什么会出现建造者模式
需要创建一个复杂对象的时候,这个对象通过一定的步骤组合而成,并且步骤一步都不能少。
流程
玩家(客户)告诉拳头(指挥者)我想要一个什么样的英雄,拳头告诉手下的程序员去做一个这样的英雄,程序员去属性库(抽象建造属性类)中找,符合这样英雄的抽象属性,然后具体去设计这个英雄的各种属性。
核心
通过构造函数,让客户去改变构造函数中的里式替换子类。
代码展示
首先建造一个抽象类库,生命值,魔法值,攻击力,防御力
abstract class GameBuilder
{
public abstract void HP();
public abstract void MP();
public abstract void ATK();
public abstract void DEF();
}
其次具体到目标英雄的属性
卡牌大师属性
class TwistFate : GameBuilder
{
public override void HP()
{
Console.WriteLine("卡牌大师生命值为534");
}
public override void MP()
{
Console.WriteLine("卡牌大师法力值为333");
}
public override void ATK()
{
Console.WriteLine("卡牌大师攻击力为52");
}
public override void DEF()
{
Console.WriteLine("卡牌大师防御力为21");
}
}
戏命师烬属性
{
public override void HP()
{
Console.WriteLine("戏命师烬生命值为585");
}
public override void MP()
{
Console.WriteLine("戏命师烬法力值为300");
}
public override void ATK()
{
Console.WriteLine("戏命师烬攻击力为59");
}
public override void DEF()
{
Console.WriteLine("戏命师烬防御力为24");
}
}
然后创建一个方法通过构造函数去选择英雄
class GreatePerson
{
private GameBuilder _gb;
public GreatePerson(GameBuilder gb)
{
this._gb = gb;
}
public void GivePerson()
{
_gb.HP();
_gb.MP();
_gb.ATK();
_gb.DEF();
}
}
最后玩家选择想要的英雄
GreatePerson gp = new GreatePerson(new TwistFate());//玩家想要什么角色就建造什么角色 在括号中里式转换 把子类赋值给父类
gp.GivePerson();
更改英雄只需要更改构造函数中的new 的子类就行了
GreatePerson gp = new GreatePerson(new Jhin());//玩家想要什么角色就建造什么角色 在括号中里式转换 把子类赋值给父类
gp.GivePerson();