java建造者模式 給乙個你一看就懂的建造者模式

2021-08-19 15:53:26 字數 1868 閱讀 6509

在開始寫這個建造者模式的文章前,我也確實看了挺多次其他介紹這個模式的文章。感覺看了很多次才有一點對建造者模式明白透徹的感覺。細心想來,可能是介面的理解不好,平時工作比較少用到過建造者模式,所以理解的比較慢。所以看通了建造者模式,就可以加深自己對介面的理解。

那從例子開始,建造者模式就是要造東西嘛,造點啥呢?我腦海中曾經一頓掙扎,什麼,造汽車啊,大樓啊,電腦啊等等,後來發現還是簡單點造個人吧。這樣大家都好理解。讀者也可以理解造機械人。只要你喜歡。

那我們新建乙個人的類。

public class human 

public void sethead(string head)

public string getbody()

public void setbody(string body)

public string gethand()

public void sethand(string hand)

public string getfoot()

public void setfoot(string foot)

}

這個就是人的類了,我們取名為human。只要是人都是這個類出來的。

那我們想要造人的話,得有乙個標準吧?  來要造人的話得有乙個步驟吧?頭,身體,手,腳,那都得有。

所以我們先寫乙個介面。乙個定義了造人標準的介面。

public inte***ce ibuildhuman
看,乙個介面定義好了。有各種造部位的方法,最後給個createhuman方法給你返回乙個我們想要造的人。

現在,人的類和造人的標準我們都定義好了。那我們可以先造乙個人出來,先造乙個高智商的人吧。

public class smartmanbuilder implements ibuildhuman 

@override

public void buildhead()

@override

public void buildbody()

@override

public void buildhand()

@override

public void buildfoot()

@override

public human createhuman()

}

這個高智商的造人過程自然是實現了ibuildhuman這個造人標準的介面了。然後就是set方法,最後返回造好的human。

好的,其實到這裡呢,我們已經完成了建造的過程。那就這麼簡單的建造過程,還搞了乙個建造模式嗎?非也。接下來,就是介紹建造者模式的精髓,那就是director。這個director呢,就是來執行我們剛才的造人動作的。沒錯,精髓就是我們剛才的造人動作。我們先看**:

public class director 

}

這個director類呢,重點在於createhumanbydirecotr的引數是我們的造人標準的介面。這樣一來,只要是實現了我們的這個介面的類,就都可以作為引數,我們剛剛不是造了乙個高智商的人嗎?那我們如果想造乙個身體運動能力出色的人,也就是運動員,這個director也可以啟動這個造人過程,只要我們把這個運動員的類先寫好。我們來看看director是如何發揮的:

public class buildertest  

}

輸出結果為:

智商180的頭腦

新的身體

新的手新的腳

看,createhumanbydirecotr這個方法帶的引數就是我們高智商人的那個類。那我們想造乙個運動員,就可以像高智商人那樣建好類,然後傳進來就可以了!

乙個很短的故事,值得你一看

女人在廚房做飯,男人在客廳陪我下棋。女人喊 你進來一下。聲音很大,語氣卻溫柔。男人去了一趟廚房,只有幾步遠,用了一溜小跑。出來時,他拿著切開的西紅柿,邊咬邊問我 該輪到誰走棋?我問 你喜歡吃生西紅柿?男人一邊咬著西紅柿,一邊抬頭瞅瞅廚房 不太喜歡 他為什麼喊你 我繼續問,還切了這麼一大塊 她以為我喜...

乙個更加簡潔的 建造者模式

建造者模式 將乙個複雜物件的構造與它的表示分離,是同樣的構建過程可以建立不同的表示 目的是為了消除其他物件複雜的建立過程 產品,包含產品型別 價錢 顏色屬性 class product 建造產品的 public function setprice price 建造產品的顏色 public funct...

一天乙個設計模式 建造者模式

這個模式和工廠模式很像,建造者 builder 模式和工廠模式的關注點不同 建造者模式注重零部件的組裝過程,而工廠方法模式更注重零部件的建立過程,但兩者可以結合使用。舉個栗子,stringbuilder public class abstractstringbuilder char c privat...