将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
程序的主线就是非变化点,用抽象类活接口完成,具体的实现细节与客户端程序无关。客户端不用改动。
abstract class Door{ }
abstract class Wall{ }
abstract class Windows{ }
abstract class Floor{ }
abstract class HouseCeiling{ }
abstract class House{ }
public abstract class Builder
{
private List productList;
以下方法最好不要是abstract 的 具体子类没有某个创建方法,则会自动调用父类的空方法,而抽象方法则强制子类实现,造成代码上的冗余。
public abstract void BuildDoor();
public abstract void BuildWall();
public abstract void BuildWindows();
public abstract void BuildFloor();
public abstract void BuildHouseCeiling();
public abstract House GetHouse();
}
public class GameManager
{
public static House CreateHouse(Builder builder)
{
builder.BuildDoor();
builder.BuildDoor();
builder.BuildWall();
builder.BuildWall();
builder.BuildWindows();
builder.BuildWindows();
builder.BuildFloor();
builder.BuildHouseCeiling();
return builder.GetHouse();
}
}
class ClassicDoor extends Door{ }
class ClassicWall extends Wall{ }
class ClassicWindows extends Windows{ }
class ClassicFloor extends Floor{ }
class ClassicHouseCeiling extends HouseCeiling{ }
class ClassicHouse extends House{ }
public class ClassicBuilder extends Builder
{
public override void BuildDoor(){ productList.add(new Door());};
public override void BuildWall(){ };
public override void BuildWindows(){ };
public override void BuildFloor(){ };
public override void BuildHouseCeiling(){ };
public override House GetHouse(){ return ClassicHouse; };
}
class APP
{
House house= GameManage.CreateHouse(new ClassicBuilder());
}
Builder 模式的几个要点:
Builder模式主要用于“分步骤构建一个复杂的对象”。在这其中“分步骤”是一个稳定的算法,而复杂对象的各个部分则经常变化。
变化点在哪里,封装哪里 。Builder模式主要在于应对“复杂对象各个部分”的频繁需求变动。其缺点在于难以应对“分步骤构建算法”的需求变动。
Abstract Factory模式解决“系列对象”的需求变化,对象之间有一定的联系,Builder模式解决“对象部分”的需求变化,对象之间没有联系。Builder模式通常和Composite模式组合使用。