定義
理解
一些概念
產品的內部表象
對象性質的建造
角色
UML類圖
Java實現
產品product
public class Product {
/**
* 定義一些關於產品的操作
*/
private String part1;
private String part2;
public String getPart1() {
return part1;
}
public void setPart1(String part1) {
this.part1 = part1;
}
public String getPart2() {
return part2;
}
public void setPart2(String part2) {
this.part2 = part2;
}
}
抽象建造者
public interface Builder {
public void buildPart1();
public void buildPart2();
public Product retrieveResult();
}
具體建造者
public class ConcreteBuilder implements Builder {
private Product product = new Product();
/**
* 產品零件建造方法1
*/
@Override
public void buildPart1() {
//構建產品的第一個零件
product.setPart1("編號:9527");
}
/**
* 產品零件建造方法2
*/
@Override
public void buildPart2() {
//構建產品的第二個零件
product.setPart2("名稱:XXX");
}
/**
* 產品返還方法
*/
@Override
public Product retrieveResult() {
return product;
}
}
導演類
public class Director {
/**
* 持有當前需要使用的建造器對象
*/
private Builder builder;
/**
* 構造方法,傳入建造器對象
* @param builder 建造器對象
*/
public Director(Builder builder){
this.builder = builder;
}
/**
* 產品構造方法,負責調用各個零件建造方法
*/
public void construct(){
builder.buildPart1();
builder.buildPart2();
}
}
客戶端測試
public class Client {
public static void main(String[]args){
Builder builder = new ConcreteBuilder();
Director director = new Director(builder);
director.construct();
Product product = builder.retrieveResult();
System.out.println(product.getPart1());
System.out.println(product.getPart2());
}
}
//創建build
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
//向build中set各種建造dialog的"原材料",在代碼結構中,這些原材料都是build自帶的,但在實際開發中,經常需要傳入一些對象來創造不同的產品
builder.setTitle('simple dialog').setIcon(R.drawable.tools).setPositiveButton(builder);
//調用create方法創建對話框
AlertDialog dialog = builder.create();
//顯示對話框
dialog.show();
//以上代碼可簡化爲如下形式,在實際開發中我們經常這麼用
new AlertDialog.Builder(mContext)..setTitle('simple dialog').setIcon(R.drawable.tools).setPositiveButton(builder).create().show();