版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/u010046908/article/details/50750542
Java中建造者(Builder)設計
1Builder模式的定義
将一個複雜的對象的建構與他的表示分離,使的同樣的建構過程可以建構不同的表示。
2Builder模式的使用場景
(1)相同的方法,不同的執行順序,産生不同的事件結果。
(2)多個部件都可以裝配到一個對象中,但是産生的運作結果又不相同。
(3)産品類非常複雜,或者産品類中調用順序不同産生不同的作用,這時候使用建造者模式非常是适合。
(4)當初始化一個複雜的對象,如好多參數,且很多參數都具有預設值。
3Builder模式的UML圖
Product産品類---産品的抽象
Builder--抽象的Builder,規範産品的元件,一般是由子類實作具體的元件過程。
ConcreateBuilder --具體的Builder類
Director--統一的元件過程。
代碼的實作
package builder;
/**
* 抽象deBuilder
* @author lidong
*
*/
public abstract class Builder {
/**
* 設定主機
* @param board
*/
public abstract void buildBorad(String board);
/**
* 設定顯示器
* @param display
*/
public abstract void buildDisplay(String display);
/**
* 設定作業系統
*/
public abstract void buildOS();
/**
* 建立機器
* @return
*/
public abstract Computer create();
}
package builder;
/**
* 計算機抽象類
* Product角色
* @author Administrator
*
*/
public abstract class Computer {
protected String mBoard;//主機闆
protected String mDisplay;//顯示器
protected String mOS;//系統
protected Computer() {
}
public String getmBoard() {
return mBoard;
}
public void setmBoard(String mBoard) {
this.mBoard = mBoard;
}
public String getmDisplay() {
return mDisplay;
}
public void setmDisplay(String mDisplay) {
this.mDisplay = mDisplay;
}
//抽象方法
public abstract void setOS();
@Override
public String toString() {
return "Computer [mBoard=" + mBoard + ", mDisplay=" + mDisplay
+ ", mOS=" + mOS + "]";
}
}
package builder;
/**
* 具體的builder類,Window電腦
* @author lidong
*
*/
public class WindowBuilder extends Builder {
private Computer mComputer = new WindowPC();
@Override
public void buildBorad(String board) {
mComputer.setmBoard(board);
}
@Override
public void buildDisplay(String display) {
mComputer.setmDisplay(display);
}
@Override
public void buildOS() {
mComputer.setOS();
}
@Override
public Computer create() {
return mComputer;
}
}
package builder;
/**
* window 電腦
* @author lidong
*
*/
public class WindowPC extends Computer{
protected WindowPC() {
super();
}
@Override
public void setOS() {
mOS = "window 7";
}
}
package builder;
/**
* Director 負責建構Compurter
* @author lidong
*
*/
public class Dirctor {
Builder mBuilder = null;
public Dirctor(Builder mBuilder) {
super();
this.mBuilder = mBuilder;
}
/**
* 建構對象
* @param borad
* @param display
*/
public void construct(String borad,String display) {
mBuilder.buildBorad(borad);
mBuilder.buildDisplay(display);
mBuilder.buildOS();
}
}
測試類:
package builder;
public class Test {
public static void main(String[] args) {
//構造器
Builder builder1 = new WindowBuilder();
Dirctor pcDirctor1 = new Dirctor(builder1);
pcDirctor1.construct("英特爾2", "1G顯示卡");
System.out.println("Computer info ="+builder1.create().toString());
}
}
代碼下載下傳位址:
https://github.com/lidong1665/JAVA_DESIGN_PATTERNS/tree/master/JAVA_DESIGN_PATTERNS