将一个复杂对象的构建与它的表示分离,使得同样的构造过程可以创建不同的表示。
1、Product(复杂的产品对象):一个复杂对象,包含多个成员变量。
public class Product(){
private String PartA;
private String PartB;
private String PartC;
//三个成员变量的setter()和getter()省略。
}
2、抽象Builder(建造者):声明两类方法,一类负责创建复杂对象中的各个部件,另一类负责返回复杂对象(即Product)。
public abstract class Builder(){
Product product=new Product();
//1.各个部件的创建方法声明
public abstract void buildPartA();
public abstract void buildPartB();
public abstract void buildPartC();
//2.返回复杂对象
public Product getResult(){
return product;
}
}
3、ConcreteBuilder(具体建造者):继承或实现Builder,覆写Builder中的方法,各个部件的具体实现。
public class ConcreteBuilder extends Build(){
public void buildPartA(){
product.setPartA("A111");
}
public void buildPartB(){
product.setPartA("B111");
}
public void buildPartC(){
product.setPartA("C111");
}
}
4、Director(指挥者):指挥一个复杂对象的构建,包括构建的流程。
public class Director(){
//创建方法,以Builder抽象类作为方法参数
public Product buildProduct(Builder b){
//建造过程:A->B->C
b.buildPartA();
b.buildPartB();
b.buildPartC();
//调用返回复杂对象的方法,将建造后的对象进行返回。
Product p=b.getResult();
}
}
某公司要开发一个视频播放软件,提供多种显示模式,如完整模式,精简模式,记忆模式等。不同模式下,显示有所差别。在完整模式下将显示主窗口,菜单,播放列表,控制条;在精简模式下将显示主窗口和控制条;在记忆模式下将显示主窗口,播放列表,控制条。请用建造者模式设计。
复杂产品对象:视频播放软件(VideoPlayer) 抽象Builder:显示部件(Display) 具体Builder: (1)完整模式Builder(FullMode) (2)精简模式Builder(SimpleMode) (3)记忆模式Builder(MemoryMode)
指挥者Director:(BuilderController)
核心代码:
抽象Builder
public abstract class Display {
protected VideoPlayer videoPlayer=new VideoPlayer();
//声明建造方法
public abstract void buildMenu();
public abstract void buildPlayList();
public abstract void buildMainWin();
public abstract void buildControlBar();
//返回复杂产品对象
public VideoPlayer getVideoPlayerBean(){
return videoPlayer;
}
//钩子方法,对复杂对象构建进行精细的控制
public boolean isNeedMenu(){
return true;
}
public boolean isNeedPlayList(){
return true;
}
public boolean isNeedMainWin(){
return true;
}
public boolean isNeedControlBar(){
return true;
}
}
具体Builder