我们都知道,建造一辆汽车是非常复杂的一个工作,需要建造发动机,建造轮胎,建造方向盘,建造地盘等等。但对于我们客户来说,并不需要知道这些具体的建造过程,我们只需要一辆完整的车然后使用就可以了。建造者模式和这个例子非常相似,我们相当于客户端,而那些负责建造汽车的相当于建造者,客户端和建造者之间通常有一个指挥者来协调工作。这段话大家可能不理解,没关系继续往下看。
建造者模式关注的是如何一步步创建一个复杂对象交给客户端使用,这种模式隔离了对象的创建和使用。
下面是建造者模式官方的定义:将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式主要包含以下四种角色
1.AbstractBuilder(抽象建造者):它是所有具体建造者的父类,可以设计成抽象类,接口。声明两类方法:一是创建复杂对象各个细节的方法(类图中的BuildX),二是返回复杂对象的方法(类图中的GetCar)。
2.ConcreteBuilder(BaoMaBuilder,具体建造者):它实现了抽象建造者中的声明的抽象方法或者接口。
3.Product(Car,产品):他是客户端最终想使用的那个复杂对象,也是建造者要建造的复杂对象
4.Director(指挥者):负责安排复杂对象的建造顺序。客户端一般情况下只需要于指挥者打交道就可以了。
public class Builder : MonoBehaviour {
void Start () {
Director d = new Director(new BaoMaBuilder());
d.CreateCar();
}
void Update () {
}
}
//汽车
public class Car
{
private string fangxianpan; //方向盘
public string Fangxianpan
{
get { return fangxianpan; }
set { fangxianpan = value; }
}
private string luntai; //轮胎
public string Luntai
{
get { return luntai; }
set { luntai = value; }
}
private string fadongji; //发动机
public string Fadongji
{
get { return fadongji; }
set { fadongji = value; }
}
}
//建造者,抽象类
public abstract class aBuilder
{
public Car car = new Car();
public abstract void BuildFXP(); //建造方向盘
public abstract void BuildLT(); //建造轮胎
public abstract void BuildFDJ(); //建造发动机
public Car GetCar()
{
Debug.Log("我拿到宝马汽车啦");
return car;
}
}
//具体建造者
public class BaoMaBuilder : aBuilder
{
public override void BuildFXP()
{
car.Fangxianpan = "宝马方向盘";
Debug.Log("方向盘建造完成");
}
public override void BuildLT()
{
car.Luntai = "宝马轮胎";
Debug.Log("宝马轮胎建造完毕");
}
public override void BuildFDJ()
{
car.Fadongji = "发动机";
Debug.Log("宝马发动机建造完毕");
}
}
//指挥者类
public class Director
{
private aBuilder aBuilder;
public Director(aBuilder aBuilder)
{
this. aBuilder = aBuilder;
}
public Car CreateCar()
{
aBuilder.BuildFDJ();
aBuilder.BuildFXP();
aBuilder.BuildLT();
return aBuilder.GetCar();
}
}