1. 程式人生 > >android設計模式——建造者模式

android設計模式——建造者模式

Builder模式就是相比於一輛汽車有各個部件 但是不同的汽車有不同的部件 但是裝配成一輛車的方法相同

例子:比如肯德基有漢堡,雞翅,可樂,但是不同的套餐 是不同的組合

使用場景:

  1. 相同的方法,不同的執行順序產生不同的結果,
  2. 多個部件或零件,都可以裝配到一個物件中,但是產生的執行結果又不同。
  3. 產品類非常複雜,或者產品類的呼叫順序不同產生不同的結果。
  4. 初始化一個物件特別複雜,如引數多,且很多引數都具有預設值。

類圖:

  1. Produce 產品類-產品的抽象類
  2. Builder - 抽象的Builder 類 規範產品的元件 一般是有子類實現具體的元件過程;
  3. ConcreteBuilder-具體的bulider 類
  4. Director-統一的組裝過程

自我理解分為三類,產品,組裝,具體實現

產品:電腦,內容有主機板,顯示器,作業系統

組裝:將主機板,顯示器,作業系統安裝到電腦

具體實現:new BuilderTest().setA("A").setB("B").create();

abstract class Computer{
	protected String mBoard;//主機板 顯示器 作業系統
	protected String mDisplay;
	protected String mOS;
	
	protected Computer() {}
	
	

	public void setmBoard(String mBoard) {
		this.mBoard = mBoard;
	}

	
	public void setmDisplay(String mDisplay) {
		this.mDisplay = mDisplay;
	}

	public abstract void setmOS() ;//這個是抽象方法
	
	public String toString() {
		return "Computer: 主機板是:"+mBoard+"顯示器是"+mDisplay+"作業系統是"+mOS;
	}
	
}

//具體的電腦類  MacBook
class Macbook extends Computer{

	protected Macbook() {
		// TODO 自動生成的建構函式存根
	}
	@Override
	public void setmOS() {
		// TODO 自動生成的方法存根
		mOS = "Mac OS X 10.10";
	}
	
}


abstract class Builder{
	public abstract void buildBoard(String board);
	public abstract void buildDisplay(String display);
	public abstract void buildOs();
	public abstract Computer create();
}

class MacbookBuilder extends Builder{

	private Computer mComputer = new Macbook();
	@Override
	public void buildBoard(String board) {
		// TODO 自動生成的方法存根
		mComputer.setmBoard(board);
	}

	@Override
	public void buildDisplay(String display) {
		// TODO 自動生成的方法存根
		mComputer.setmDisplay(display);
	}

	@Override
	public void buildOs() {
		// TODO 自動生成的方法存根
		mComputer.setmOS();
	}

	@Override
	public Computer create() {
		// TODO 自動生成的方法存根
		return mComputer;
	}
	
}

//
class Director{//相當於組裝
	
	Builder mBuilder = null;
	public Director (Builder builder) {
		this.mBuilder = builder;
	}
	public void Construct(String board,String display) {
		mBuilder.buildBoard(board);
		mBuilder.buildDisplay(display);
		mBuilder.buildOs();
	}
}

主函式

public static void main(String[] args) {
		// TODO 自動生成的方法存根
		Builder builder = new MacbookBuilder();
		Director director = new Director(builder);
		
		director.Construct("英特爾主機板", "Retinax顯示器");
		System.out.println("電腦資訊"+builder.create().toString());
		
		
	}

new BuilderTest().setA("A").setB("B").create();//去除了Director角色,直接使用Builder()使整個結構變得簡單

要點:

  1. 構造方法是protect型別
  2. 比如一個類需要很多構造方法,但是不同的構造方法需要不同的引數,這時就可以使用建造者模式,一次性把所有的引數列完(避免寫多個不同的建構函式)需要使用的引數進行設定,不使用的引數為預設值,然後構造!