1 概述

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

2 结构

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();
	}
}

3 应用实例

某公司要开发一个视频播放软件,提供多种显示模式,如完整模式,精简模式,记忆模式等。不同模式下,显示有所差别。在完整模式下将显示主窗口,菜单,播放列表,控制条;在精简模式下将显示主窗口和控制条;在记忆模式下将显示主窗口,播放列表,控制条。请用建造者模式设计。

复杂产品对象:视频播放软件(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