【复习资料】设计模式
面向對象設計原則
簡單工廠模式(類創建型模式)
a. 工廠角色負責實現創建所有實例的內部邏輯。
b. 抽象產品角色是創建的所有對象的父類,負責描述所有實例所有的公共接口。
c. 具體產品角色是創建目標,所有創建的對象都充當這個角色的某個具體類的實例。
創造者模式(對象創建型模式)
a. 客戶端不必知道產品內部組成的細節,將產品本身與產品的創建過程解耦,使得相同的創建過程可以創建不同的產品對象。
b. 每一個具體建造者都相對獨立,而與其他的具體建造者無關,因此可以很方便地替換具體建造者或增加新的具體建造者,符合開閉原則。
c. 可以更加精細的控制產品的創建過程。
a. 由于建造者模式所創建的產品一般都具有較多的共同點,其組成部分相似,因此其使用范圍受到一定的限制。
b. 如果產品的內部變化復雜,可能會導致需要定義很多具體建造者類來實現這種變化,導致系統變得龐大。
a. 抽象建造者為創建一個產品對象的各個部件指定抽象接口。
b. 具體建造者實現了抽象建造者接口,實現各個部件的構造和裝配方法,定義并明確它所創建的復雜對象,也可以提供一個方法返回創建好的復雜產品對象。
c. 產品角色是被構建的復雜對象,包含多個組成部件。
d. 指揮者負責安排復雜對象的建造次序,指揮者與抽象建造者之間存在關聯關系,可以在其construct()建造方法中調用建造者對象的部件構造與裝配方法,完成復雜對象的建造。
a. 隔離了客戶與生產過程。
b. 負責控制產品的生產過程。
a. 省略抽象建造者角色:如果系統只需要一個具體建造者可以省略抽象建造者。
b. 省略指揮者角色:如果已經省略了抽象建造者,那么還可以省略指揮者,讓建造者扮演指揮者和建造者雙重角色。
a. 建造者模式返回一個完整的產品;抽象工廠模式返回一個產品族。
b. 抽象工廠模式可以看做汽車配件工廠,生產一系列配件;建造者模式可以看做汽車組裝工廠,對配件進行組裝,生產出一個完整的汽車。
原型模式(對象創建型模式)
a. 抽象原型類:定義具有克隆自己的方法的接口。
b. 具體原型類:實現具體的克隆方法,在克隆方法中返回自己的一個克隆對象,讓一個原型克隆自身從而創建一個新的對象。
c. 在客戶類:只需要直接實例化或通過工廠方法等方式創建一個對象,再通過調用該對象的克隆方法復制得到多個相同的對象。
單例模式(對象創建型模式)
a. 單例類只能有一個實例。
b. 它必須自行實例化這個實例。
c. 它必須自行向整個系統提供這個實例。
d. 提供全局訪問方法。
適配器模式(類結構性模式或對象結構型模式)
適配器模式包含四個角色:
a. 目標抽象類定義客戶要用的特定領域的接口。
b. 適配器類可以調用另一個接口,作為一個轉換器,對適配者和抽象目標類進行適配,它是適配器模式的核心。
c. 適配者類是被適配的角色,它定義了一個已經存在的接口,這個接口需要適配
d. 在客戶類中針對目標抽象類進行編程,調用在目標抽象類中定義的業務方法。
a. 適配者接口:適配者是被適配的對象。
b. 默認適配器類:默認適配器類是默認適配器中適配器角色,它是該模式的核心。默認適配類使用空方法的形式實現了在接口中聲明的方法。
c. 具體業務類:是適配器類的子類,在沒有引入適配器類之前,它需要實現適配者接口,因此需要實現在適配者接口中定義的所有方法,而一些無用的方法也提供空實現。為了簡化操作,在有了適配器類之后,可以直切繼承該適配器類,根據需要有選擇地覆蓋在適配器類中定義的方法。
組合模式(對象結構型模式)
組合模式的優點:
a. 可以方便地對層次結構進行控制,客戶端調用簡單。
b. 由于客戶端使用構件的一致性,簡化了客戶端代碼。
a. 使設計變得更加抽象,且增加新構件時可能會產生一些問題。
b. 很難對容器中的構件類型進行限制。
a. 抽象構件為葉子構件和容器構件對象聲明接口。
b. 葉子構件在組合結構中表示葉子節點對象,葉子節點沒有子節點。
c. 容器構件在組合結構中表示容器節點對象,容器節點包含子節點,其子節點可以是葉子節點,也可以是容器節點,它提供一個集合用于存儲子節點,實現了在抽象構件中定義的行為。
裝飾模式(對象結構型模式)
裝飾模式的優點:
a. 可以提供比繼承更多的靈活性。
b. 可以通過一種動態的方式來擴展一個對象的功能,并通過使用不同的具體裝飾類以及這些裝飾類的排列組合,來實現不同的構件。
c. 具體構件類與具體裝飾類可以獨立變化,用戶可以根據需要增加新的具體構件類和具體裝飾類。
a. 使用裝飾模式進行系統設計時將產生很多小對象。
b. 裝飾模式比繼承更加易于出錯,排錯也很困難。
a. 抽象構件定義了對象的接口,可以給這些對象動態增加職責(方法)。
b. 具體構件定義了具體的構件對象,實現了在抽象構件中聲明的方法,裝飾器可以給它增加額外的職責(方法)。
c. 抽象裝飾類是抽象構件類的子類,用于給具體構件增加職責,但是具體職責在其子類中實現。
d. 具體裝飾類是抽象裝飾類的子類,負責向構件添加新的職責。
觀察者模式(對象行為型模式)
觀察者模式的優點:
a. 可以實現表示層和數據邏輯層的分離。
b. 并在觀察目標和觀察者之間建立一個抽象的耦合。
a. 如果一個觀察目標對象有很多觀察者的話,將所有的觀察者都通知到會花費很多時間。
b. 如果在觀察者和觀察目標之間有循環依賴的話可能導致系統崩潰。
a. 目標又稱為主題,它是指被觀察的對象。
b. 具體目標是目標類的子類,通常它包含有經常發生改變的數據,當它的狀態發生改變時,向它的各個觀察者發出通知。
c. 觀察者將對觀察目標的改變做出反應。
d. 在具體觀察者中維護一個指向具體目標對象的引用,它存儲具體觀察者的有關狀態,這些狀態需要和具體目標的狀態保持一致。
狀態模式(對象行為型模式)
狀態模式的優點:
a. 封裝了轉換規則,并枚舉可能的狀態。
b. 它將所有與某個狀態有關的行為放到一個類中,并且可以方便地增加新的狀態。
c. 只需要改變對象狀態即可改變對象的行為。
d. 還可以讓多個環境對象共享一個狀態對象,從而減少系統中對象的個數。
a. 狀態模式的結構與實現都較為復雜,如果使用不當將導致程序結構和代碼的混亂。
b. 不滿足“開閉原則”。
a. 環境類又稱為上下文類,它是擁有狀態的對象,在環境類中維護一個抽象狀態類State的實例,這個實例定義當前狀態,在具體實現時,它是一個State子類的對象,可以定義初始狀態。
b. 抽象狀態類用于定義一個接口以封裝與環境類的一個特定狀態相關的行為。
c. 具體狀態類是抽象狀態類的子類,每一個子類實現一個與環境類的一個狀態相關的行為,每一個具體狀態類對應環境的一個具體狀態,不同的具體狀態類其行為有所不同。
策略模式(對象行為型模式)
策略模式的優點:
a. 對“開閉原則”的完美支持,在不修改原有系統的基礎上可以更換算法或者增加新的算法。
b. 它很好地管理算法族,提高了代碼的復用性。
c. 替換繼承,避免多重條件轉移語句的實現方式。
a. 環境類在解決某個問題時可以采用多種策略,在環境類中維護一個對抽象策略類的引用實例。
b. 抽象策略類為所支持的算法聲明了抽象方法,是所有策略類的父類。
c. 具體策略類實現了在抽象策略類中定義的算法。
總結
以上是生活随笔為你收集整理的【复习资料】设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Codeforces 993C. Car
- 下一篇: Codeforces 991E. Bus