第十三篇:建造者模式

見名之意,建造者就是用來建造對象的嘛!不過...等等,我們先前不是有工廠模式嗎?我記得工廠模式也是用來創建對象的阿? 彆着急,聽我說!

我們得將這兩種模式區分一下,工廠模式是用來創建一個對象,它只初始化對象必須具備的屬性,而建造者模式呢,是在創建完對象的基礎上,再對對象進行一系列操作從而拿到更加完善的對象!  就比如造房子,工廠模式就像是提供一個地基,而通過建造者模式,我們可以在有地基的基礎上,再進行砌磚,打樑,蓋瓦...等等操作最終得到一個房子!


現在我們試想一下,如果需要你來組裝一臺電腦,你需要先插好主板,再裝上CPU,然後是顯卡,電源,內存...等等,然而,你可能犯迷糊了,忘記裝上內存...那你的電腦可就無法正常運行了!當不同的人去組裝電腦時,都有可能忘記做某事而導致電腦無法正常開機, 這在我們程序裏面表示的就是,構建某一個對象,然而忘記了某個步驟,導致最終形成的對象與期待不相匹配! 就比如構建一個遊戲人物,然而忘記繪製雙手...這就很尷尬了!


所以,我們需要某種方式,通過這種方式可以標準化的構建某個對象,那麼這種構建對象的方式,就稱爲建造者模式!

OK,這個模式很簡答, 就不多說了,直接讓代碼擼起來!

//抽象電腦類,這些步驟也是有順序的,不能讓客戶端瞎搞
//總不能主板好沒裝就插內存條吧?往哪插?
abstract class AbstractComputer{
	abstract void addMainBoard();//安裝主板
	abstract void addCPU();//安裝CPU
	abstract void addGraphics();//安裝顯卡
	abstract void addPower();//安裝電源
	abstract void addMemory();//安裝內存條
	abstract void joints();//將各部件的插線連接好
}

//一臺聯想電腦
class ThinkComputer extends AbstractComputer{
	@Override
	void addMainBoard() {
		System.out.println("安裝好聯想牌主板");
	}
	@Override
	void addCPU() {
		System.out.println("安裝好聯想牌CPU");
	}
	@Override
	void addGraphics() {
		System.out.println("安裝好聯想牌顯卡");
	}

	@Override
	void addPower() {
		System.out.println("安裝好聯想牌電源");
	}
	@Override
	void addMemory() {
		System.out.println("安裝好聯想牌內存");
	}
	@Override
	void joints() {
		System.out.println("將聯想牌電腦插線全部插好");
	}
}
//一臺華碩電腦
class AsusComputer extends AbstractComputer{
	@Override
	void addMainBoard() {
		System.out.println("安裝好華碩牌主板");
	}
	@Override
	void addCPU() {
		System.out.println("安裝好華碩牌CPU");
	}
	@Override
	void addGraphics() {
		System.out.println("安裝好華碩牌顯卡");
	}

	@Override
	void addPower() {
		System.out.println("安裝好華碩牌電源");
	}
	@Override
	void addMemory() {
		System.out.println("安裝好華碩牌內存");
	}
	@Override
	void joints() {
		System.out.println("將華碩牌電腦插線全部插好");
	}
}


//構建者對象,可以標準化,流程化構建電腦對象,客戶端不需要知道一臺電腦具體該怎麼組裝,
//只要告知構建者要組裝的電腦,它就能正確的對其進行組裝!
class ComputerBuilder{
	public AbstractComputer buildComputer(AbstractComputer ac){
		ac.addMainBoard();
		ac.addCPU();
		ac.addGraphics();
		ac.addPower();
		ac.addMemory();
		ac.joints();
		return ac;
	}
	
}


我們來測試一下吧!

public class Test {
	public static void main(String[] args) {
		AbstractComputer acThink = new ThinkComputer();
		AbstractComputer acAsuc = new AsusComputer();
		
		ComputerBuilder cb = new ComputerBuilder();
		//讓構建者構建好聯想電腦;
		acThink = cb.buildComputer(acThink);
		System.out.println("********************************");
		acAsuc = cb.buildComputer(acAsuc);
	}
}


輸出*****************************************************

安裝好聯想牌主板
安裝好聯想牌CPU
安裝好聯想牌顯卡
安裝好聯想牌電源
安裝好聯想牌內存
將聯想牌電腦插線全部插好
********************************
安裝好華碩牌主板
安裝好華碩牌CPU
安裝好華碩牌顯卡
安裝好華碩牌電源
安裝好華碩牌內存
將華碩牌電腦插線全部插好

**********************************************************

是不是很簡單啦!


發佈了48 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章