本文預(yù)覽:
- 狀態(tài)模式
- 組合模式
- 迭代器
- 職責(zé)鏈
- 命令
狀態(tài)模式
定義:狀態(tài)模式(State Pattern)赘艳,允許一個(gè)對象在其內(nèi)部狀態(tài)改變時(shí)改變它的行為。對象看起來似乎修改了它的類敦捧。
類型:對象行為型模式
一個(gè)對象有一個(gè)狀態(tài)筝家,那么每一個(gè)狀態(tài)又對應(yīng)一些相應(yīng)的行為。如果這個(gè)對象有很多狀態(tài),那么就要對應(yīng)非常多的行為百揭。那么對這些狀態(tài)的判斷以及根據(jù)狀態(tài)完成相應(yīng)的行為,會(huì)非常復(fù)雜蜓席。并且如果想添加一種新的狀態(tài)時(shí)器一,需要修改很多的現(xiàn)有代碼。這也是有違開閉原則的厨内。狀態(tài)模式正是在這樣一種情況下提出來的祈秕。
狀態(tài)模式將每種狀態(tài)對應(yīng)的行為抽象出來成為單獨(dú)的新的對象,這樣將狀態(tài)轉(zhuǎn)換顯式化了雏胃。狀態(tài)的變換不再依賴于Context內(nèi)部的行為了请毛。另外,將狀態(tài)及行為提出來能夠大為降低Context對象的復(fù)雜度瞭亮。另外如果一個(gè)State對應(yīng)多個(gè)Context時(shí),State還可以被多個(gè)Context對象共享统翩。
狀態(tài)厂汗,我們立馬會(huì)提出娶桦,今天狀態(tài)不好,做什么都沒勁栗涂;又或者是今天狀態(tài)很好斤程,做事得勁铛嘱,飯也吃得多墨吓。那么我們就以一個(gè)人不同時(shí)刻的狀態(tài)為例來講解狀態(tài)模式纹磺。
組合模式
常常有一些組件在內(nèi)部具有特定的數(shù)據(jù)結(jié)構(gòu),如果讓客戶程序依 賴這些特定的數(shù)據(jù)結(jié)構(gòu),將極大地破壞組件的復(fù)用橄杨。這時(shí)候,將這 些特定數(shù)據(jù)結(jié)構(gòu)封裝在內(nèi)部,在外部 供統(tǒng)一的接口,來實(shí)現(xiàn)與特 定數(shù)據(jù)結(jié)構(gòu)無關(guān)的訪問,是一種行之有效的解決方案。
組合模式
迭代器模式
常常有一些組件在內(nèi)部具有特定的數(shù)據(jù)結(jié)構(gòu),如果讓客戶程序依 賴這些特定的數(shù)據(jù)結(jié)構(gòu),將極大地破壞組件的復(fù)用役耕。這時(shí)候,將這 些特定數(shù)據(jù)結(jié)構(gòu)封裝在內(nèi)部,在外部 供統(tǒng)一的接口,來實(shí)現(xiàn)與特 定數(shù)據(jù)結(jié)構(gòu)無關(guān)的訪問,是一種行之有效的解決方案瞬痘。
迭代器模式
職責(zé)鏈
在軟件構(gòu)建過程中,一個(gè)請求可能被多個(gè)對象處理,但是每個(gè)請 求在運(yùn)行時(shí)只能有一個(gè)接受者,如果顯式指定,將必不可少地帶來 請求發(fā)送者與接受者的緊耦合
職責(zé)鏈