概念:
建造模式是對象的建立模式,建造模式可以将一個産品的内部表象(個人了解,可以稱為元件)與産品的生産分割開來,進而可以使一個建造過程生産出來具有不同内部表象的産品對象。
概念:
産品的内部表象:
産品不同組成成分構成(元件)這些零件可以是對象,也可以是非對象,稱為内部表象(internal representation),不同的産品可以有不同的内部表象,也就是不同的零件,使用建造模式可以使用戶端不需要知道生産的産品有哪些零件,每個産品的對應零件批次有什麼不同,是怎麼建造出來的,怎麼組裝産品。
内部表象的建造:
建構對象的過程外化到另一個建造者對象内完成,而建造者對象傳回給用戶端的是一個建設完畢的産品對象(将零件的建構跟産品的傳遞分開)。
uml結構圖:
四個角色:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICMyYTMvw1dvwlMvwlM3VWaWV2Zh1Wa-cmbw5iN2UnezgXa3lDNvwFO4cDNzETMtUGall3LcVmdhNXLwRHdo9CXt92YucWbpRWdvx2Yx5yazF2Lc9CX6MHc0RHaiojIsJye.png)
抽象建構者(Builder)角色:給出抽象接口,規範産品對象的元件的生産方式,該接口通常獨立于應用程式的商業邏輯。抽象的方法往往與對象的元件有關。
具體建造者(ConCreateBuilder)角色:實作抽象接口,完成元件的建構,并提供一個方法用于組裝最終的産品。
導演者(director)角色:調用具體的建造者角色以建立産品對象,僅僅起到指揮的作用。
産品(product)角色:産品是最終的産品角色,包含各種不同的元件。
導演者角色是與用戶端打交道的角色。導演者将用戶端建立産品的請求劃分為對各個零件的建造請求,再将這些請求委派給具體建造者角色。具體建造者角色是做具體建造工作的,但是卻不為用戶端所知。
一般來說,每有一個産品類,就有一個相應的具體建造者類。這些産品應當有一樣數目的零件,而每有一個零件就相應地在所有的建造者角色裡有一個建造方法。
産品類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;
}
}
複制
抽象建造者類Builder
public interface Builder {
public void buildPart1();
public void buildPart2();
public Product retrieveResult();
}
複制
具體建造者類ConcreteBuilder
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;
}
}
複制
導演者類Director
public class Director {
/**
* 持有目前需要使用的建造器對象
*/
private Builder builder;
/**
* 構造方法,傳入建造器對象
* @param builder 建造器對象
*/
public Director(Builder builder){
this.builder = builder;
}
/**
* 産品構造方法,負責調用各個零件建造方法
*/
public void construct(){
builder.buildPart1();
builder.buildPart2();
}
}
複制
用戶端類Client
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());
}
}
複制