設計模式 Builder模式

2021-07-25 03:59:31 字數 2223 閱讀 8268

網路上有人將它定義為:將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的物件。

所以建造者模式適合於乙個具有較多的零件(屬性)的產品(物件)的建立過程。

由五個部分構成:

1. product:concreatebuilder建立該產品的內部表示並定義它的裝配過程。

2. builder介面:抽象介面,定義建立product物件內部各個元件的操作

3. concretebuilder:實現builder的介面,以構造和裝配該產品的各個部件。定義並明確它所建立的表示,同時提供乙個返回product的介面

4. director:構造乙個使用builder介面的物件

舉個具體的例子吧:

現在我們需要生產一台電腦,有cpu,硬碟,記憶體,顯示卡,音效卡(只是用來舉例),我們可以這樣寫:

public

class computer

public

void

setmharddisk(harddisk mharddisk)

public cpu getmcpu()

public

void

setmcpu(cpu mcpu)

public memory getmmemory()

public

void

setmmemory(memory mmemory)

public graphics getmgraphics()

public

void

setmgraphics(graphics mgraphics)

public soundcard getmsoundcard()

public

void

setmsoundcard(soundcard msoundcard)

}

public

inte***ce builder

public

class

computerbuilder

implements

builder

@override

public

void

createharddisk()

@override

public

void

creatememory()

@override

public

void

creategraphics()

@override

public

void

createsoundcard()

@override

public computer getcomputer()

}

public

class director

public

void

createcomputer()

public computer getcomputer()

}

這種方式有乙個缺點就是可能引入多個過載建構函式以及setters過度使用導致不必要的複雜性

public

class

computer

public harddisk getmharddisk()

public cpu getmcpu()

public memory getmmemory()

public graphics getmgraphics()

public soundcard getmsoundcard()

public

static

class

computerbuilder

public computerbuilder graphics(graphics graphics)

public computerbuilder soundcard(soundcard soundcard)

public computer build()

}}

使用方法:

public computer createcomputer()
用這種方式方式看起來會非常直觀,另外對話方塊alertdialog也是用的這種形式

設計模式 Builder模式

bulder模式是一步步建立乙個複雜物件的建立模型,它允許使用者在不知道內部構建細節 的情況下可以更精細地控制物件的構造流程該模式為將構建複雜物件的過程和它的部件 解耦,使得構建過程和部件的表示隔離開來。將乙個負責物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示 3.1 相同的方法,不...

設計模式 Builder模式

一貫風格,直接上 package created by mingchenchen on 2017 6 14.public class user public void setid string id public string getcountry public void setcountry st...

設計模式 Builder模式

public class person public void setname string name public intgetage public void setage int age public double getheight public void setheight double h...