行為型模式用于描述程序在運(yùn)行時(shí)復(fù)雜的流程控制,即描述多個(gè)類(lèi)或?qū)ο笾g怎樣相互協(xié)作共同完成單個(gè)對(duì)象都無(wú)法單獨(dú)完成的任務(wù),它涉及算法與對(duì)象間職責(zé)的分配。
行為型模式分為類(lèi)行為模式和對(duì)象行為模式,前者采用繼承機(jī)制來(lái)在類(lèi)間分派行為,后者采用組合或聚合在對(duì)象間分配行為。由于組合關(guān)系或聚合關(guān)系比繼承關(guān)系耦合度低,滿足“合成復(fù)用原則”,所以對(duì)象行為模式比類(lèi)行為模式具有更大的靈活性。
行為型模式是 GoF 設(shè)計(jì)模式中最為龐大的一類(lèi),它包含以下 11 種模式。
⒈模板方法(Template Method)模式:定義一個(gè)操作中的算法骨架,將算法的一些步驟延遲到子類(lèi)中,使得子類(lèi)在可以不改變?cè)撍惴ńY(jié)構(gòu)的情況下重定義該算法的某些特定步驟。
⒉策略(Strategy)模式:定義了一系列算法,并將每個(gè)算法封裝起來(lái),使它們可以相互替換,且算法的改變不會(huì)影響使用算法的客戶。
⒊命令(Command)模式:將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,使發(fā)出請(qǐng)求的責(zé)任和執(zhí)行請(qǐng)求的責(zé)任分割開(kāi)。
⒋職責(zé)鏈(Chain of Responsibility)模式:把請(qǐng)求從鏈中的一個(gè)對(duì)象傳到下一個(gè)對(duì)象,直到請(qǐng)求被響應(yīng)為止。通過(guò)這種方式去除對(duì)象之間的耦合。
⒌狀態(tài)(State)模式:允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)發(fā)生改變時(shí)改變其行為能力。
⒍觀察者(Observer)模式:多個(gè)對(duì)象間存在一對(duì)多關(guān)系,當(dāng)一個(gè)對(duì)象發(fā)生改變時(shí),把這種改變通知給其他多個(gè)對(duì)象,從而影響其他對(duì)象的行為。
⒎中介者(Mediator)模式:定義一個(gè)中介對(duì)象來(lái)簡(jiǎn)化原有對(duì)象之間的交互關(guān)系,降低系統(tǒng)中對(duì)象間的耦合度,使原有對(duì)象之間不必相互了解。
⒏迭代器(Iterator)模式:提供一種方法來(lái)順序訪問(wèn)聚合對(duì)象中的一系列數(shù)據(jù),而不暴露聚合對(duì)象的內(nèi)部表示。
⒐訪問(wèn)者(Visitor)模式:在不改變集合元素的前提下,為一個(gè)集合中的每個(gè)元素提供多種訪問(wèn)方式,即每個(gè)元素有多個(gè)訪問(wèn)者對(duì)象訪問(wèn)。
⒑備忘錄(Memento)模式:在不破壞封裝性的前提下,獲取并保存一個(gè)對(duì)象的內(nèi)部狀態(tài),以便以后恢復(fù)它。
⒒解釋器(Interpreter)模式:提供如何定義語(yǔ)言的文法,以及對(duì)語(yǔ)言句子的解釋方法,即解釋器。
以上 11 種行為型模式,除了模板方法模式和解釋器模式是類(lèi)行為型模式,其他的全部屬于對(duì)象行為型模式,下面我們將詳細(xì)介紹它們的特點(diǎn)、結(jié)構(gòu)與應(yīng)用。