1. 程式人生 > >設計模式(二)11.3

設計模式(二)11.3

建造者:將一個複雜的構建與它的表示分離,使用同樣的構建過程可以建立不同的的表示。

首先有一個list parts,有一個add方法可以向list新增字串,還有一個show方法可以迴圈顯示list的資訊

在有一個構建類,有一個欄位Produc ,有一個builpart方法其中就是呼叫的product的add方法。並且有一個getresult方法返回product。

再有一個director 有一個construct方法引數是buildfer執行之後就會執行buildfer.builderparta.等於把list新增資訊了。

客戶端執行

建立指揮類,建立建造者,

執行director.construst,可以進行list的添加了,在執行bi.(builder).getresult得到product物件,執行show就可以執行list的迴圈掃描。

觀察者模式:

總體來說大概的樣子是這樣,一個類把另外一個類作為欄位,並且是一個list作為收集另外一個類的集合。有新增有刪除,並且有一個迴圈的方法,執行所有list中的物件的方法,當然這個方法中的某個內定引數和第一個類有關係,這個關係怎麼產生的。

就是第二個類把第一個類作為欄位。

在建立第二個類的時候,把第一個類的物件傳入第一個類。

通知者的關鍵就在於,第一個類迴圈呼叫第二個類的方法,並且方法中有第一個類的資訊,達到通過給所有觀察者,並且觀察者有通知者的資訊。

享元模式

運用共享技術有效的支援了大量的細顆粒度的物件。有的時候不用建立那麼多的物件,建立兩三個可以重複使用

來看一下簡單的第一個例子(我自己的理解)

建立一個使用者類user用做引數使用,website網站類name欄位,use方法引數有name和user.name重點是user.name代表從外邊得到的引數,name代表本類的獨有屬性,這個物件的(唯一代表)

工廠類批量建立website其中用的hashtable,建立之後同時加入到hashtable中,並且有一個通過key取出的方法

在建立的時候客戶端使用的時候,name變了username.name是同一個物件,但是隻有username.name是一個新的那就是沒有建立新的物件,關鍵在於是不是重新建立物件,關鍵元素在於是否重新建立浪費記憶體,這個應該就是享元模式。關鍵在於判斷這個物件是否已經建立了。

訪問者模式

表示一個作用與某物件結構中的各元素的操作。它使你可以在不改變各元素的前提下作用於這些元素的新操作

action類為抽象類

success是子類,有對應man的getmanconclusion和women的getwomanconclusion方法對於的引數是man和woman。

person是基類

man和woman繼承person引數是action

使用引數的方法action.getman(woman)

objectstructure物件結構有欄位Ilist<person>可以新增person

然後有display迴圈呼叫person的accept,引數是action這樣首先判斷是男還是女自動找success的男的方法還是女的方法

客戶端使用的時候建立objectstructure物件結構,新增人person,建立action了。並且呼叫display方法,使用person的accpetc引數是action,這樣會自動找到男人還是女人,使用這個具體的類。引數是action。並且使用action中的方法,到了男人女人類中方法已經明確了。在進入success類已經是順序結構了。