生成器模式(Builder)

创建型设计模式。对象的构建过程如果相对稳定,对象内的对象频繁变化,可使用此模式。
如,装修房子的过程稳定,先铺地板,然后天花板,最后门和窗;然地板,天花板,门,窗这些东西根据装修要求不同选用不同的材料。

抽象类(房子对象以及相关对象和方法)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public abstract class Floor
{}
public abstract class Ceiling
{}
public abstract class Window
{}
public abstract class Door
{}
public abstract class House
{}
public abstract class BuildHouse
{
public Floor f;
public Ceiling c;
public Window w;
public Door d;
public abstract void BuildFloor();
public abstract void BuildCeiling();
public abstract void BuildWindow();
public abstract void BuildDoor();
public abstract House GetHouse();
}

实现类(具体类对象,房子的一个实现类)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class MyFloor:Floor
{}
public class MyCeiling:Ceiling
{}
public class MyWindow:Window
{}
public class MyDoor:Door
{}
public class MyHouse:House
{}
public class MyBuildHouse:BuildHouse
{
public override void BuildFloor()
{
f = new MyFloor();
}
public override void BuildCeiling()
{
c = new MyCeiling();
}
...
...
public override House GetHouse()
{
return new MyHouse();
}
}

构建过程类(房子构建过程,稳定部分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class HouseManager
{
public House CreateHouse(BuildHouse b)
{
//一地板,一天花板,两个窗,一个门(相对稳定)
b.BuildFloor();
b.BuildCeiling();
b.BuildWindow();
b.BuildWindow();
b.BuildDoor();
return b.GetHouse();
}
}

客户端调用过程

1
2
3
4
5
void main()
{
HouserManager hm = new HouserManager();
Houser h = hm.CreateHouser(new MyBuildHouse());
}