将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

程序的主线就是非变化点,用抽象类活接口完成,具体的实现细节与客户端程序无关。客户端不用改动。

 

 

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模式组合使用。

 

 

posted on 2014-06-05 19:02  路过的二师兄  阅读(345)  评论(0编辑  收藏  举报