建造者模式
首先,建造者模式的封裝性很好。使用建造者模式可以有效的封裝變化,在使用建造者模式的場景中,一般產品
類和建造者類是比較穩定的,因此,將主要的業務邏輯封裝在導演類中對整體而言可以取得比較好的穩定性。
其次,建造者模式很容易進行擴展。如果有新的需求,通過實現一個新的建造者類就可以完成,基本上不用修改
之前已經測試通過的代碼,因此也就不會對原有功能引入風險。
以上的是引用的.....
UML圖:
建造者模式uml.png
public class BuilderPattern {
public static void main(String[] args) {
// TODO Auto-generated method stub
Director director = new Director();
Mclaren product = director.construct();
}
}
/**
* 產品Mclaren
*
* @author senninha
*
*/
class Mclaren {
// 輪胎
String tyre;
// 方向盤
String wheel;
}
/**
* 建造者接口
*
* @author senninha
*
*/
interface IMclarenBuilder {
/**
* 造輪子
*/
void buildTyre();
/**
* 造方向盤
*/
void buildWheel();
/**
* 返回build的對象
*/
Mclaren getResult();
}
/**
* 實際建造者
*
* @author senninha
*
*/
class ConcreteMclarenBuilder implements IMclarenBuilder {
// 持有Mclaren對象
private Mclaren mclaren = new Mclaren();
@Override
public void buildTyre() {
// TODO Auto-generated method stub
mclaren.tyre = "輪胎";
}
@Override
public void buildWheel() {
// TODO Auto-generated method stub
mclaren.wheel = "方向盤";
}
@Override
public Mclaren getResult() {
// TODO Auto-generated method stub
return mclaren;
}
}
/**
* 導演者
* @author senninha
*
*/
class Director {
private IMclarenBuilder builder = new ConcreteMclarenBuilder();
public Director() {
}
public Mclaren construct() {
builder.buildTyre();
builder.buildWheel();
return builder.getResult();
}
}
仔細看看,如果把Director類作為調用的客戶端,其實其他類就有點像是簡單工廠模式了,也就是Director承擔了構造對象的具體細節.
對比一下普通工廠模式,發現建造者模式是在生成更復雜的對象的時候才使用.