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