建造者模式(Builder Pattern),将一个复杂对象的构建与它的表示分离,使的同样的构建过程可以创建不同的表示。
优点:使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以如要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。
eg:建造房子
//产品
public class House
{
public string Roof { get; set; }
public string Walls { get; set; }
}
//抽象构建者
public interface IsubContrator
{
void AddRoof();
void AddWalls();
House GetHouse();
}
//具体构建者A
public class HouseBuildA: IsubContrator
{
private House h = new House();
public void AddRoof()
{
h.Roof = "加一个小房顶";
}
public void AddWalls()
{
h.Walls = "加四面墙";
}
public House GetHouse()
{
return h;
}
}
//具体建造者B
public class HouseBuildB: IsubContrator
{
private House h = new House();
public void AddRoof()
{
h.Roof = "加一个大房顶";
}
public void AddWalls()
{
h.Walls = "加八面墙";
}
public House GetHouse()
{
return h;
}
}
//指挥者类
public class Contrator
{
public void Mark(IsubContrator sub)
{
sub.AddRoof();
sub.AddWalls();
}
}
//调用
Console.WriteLine("开始建造一个小房子:");
Contrator c = new Contrator();
IsubContrator sub = new HouseBuildA();
c.Mark(sub);
House house = sub.GetHouse();
Console.WriteLine(house.Roof+"...");
Console.WriteLine(house.Walls+"...");