天天看點

Java中建造者(Builder)設計Java中建造者(Builder)設計

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 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