建造者模式

摘抄《C#大話設計模式》

建造者模式(Bulider) : 講一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。

建造者模式的結構圖如下:



建造者模式的基本代碼:

Product類——產品類,由多個部件組成。

package com.schema.builder;

import java.util.ArrayList;
import java.util.List;


public class Product {
	private List<String> parts = new ArrayList<String>();

	public void Add(String part){
		parts.add(part);
	}

	public void Show(){
		System.out.println("產品創建:------");

		for(String part : parts){
			System.out.println(part);
		}
	}
}

Builder類——抽象建造者類,確定產品由兩個部件PartA和PartB組成,並聲明一個得到產品建造後結果的方法GetResult。

package com.schema.builder;

public abstract class Builder {
	public abstract void BuildPartA();
	public abstract void BuildPartB();
	public abstract Product GetResult();
}
ConcreteBuilder1和ConcreteBuilder2類

package com.schema.builder;

public class ConcreteBuilder1 extends Builder{
	private Product product = new Product();

	public void BuildPartA(){
		product.Add("部件A");
	}

	public void BuildPartB(){
		product.Add("部件B");
	}

	public Product GetResult(){
		return product;
	}
}

package com.schema.builder;

public class ConcreteBuilder2 extends Builder {
	private Product product = new Product();

	public void BuildPartA(){
		product.Add("部件X");
	}

	public void BuildPartB(){
		product.Add("部件Y");
	}

	public Product GetResult(){
		return product;
	}
}


Director類——指揮者類和客戶端代碼。

package com.schema.builder;

public class Director {
	public void Construct(Builder bulider){
		bulider.BuildPartA();
		bulider.BuildPartB();
	}

	public static void main(String[] args){
		Director director = new Director();

		Builder b1 = new ConcreteBuilder1();
		Builder b2 = new ConcreteBuilder2();

		director.Construct(b1);
		director.Construct(b2);

		Product p1 = b1.GetResult();
		Product p2 = b2.GetResult();

		p1.Show();
		p2.Show();

	}
}

建造者模式的好處就是使得建造代碼與表示代碼分離,由於建造者隱藏了該產品是如何組裝的,所以若需改變一個產品的內部表示,只需再定義一個具體的建造者就可以了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章