大話設計模式筆記四

2022-06-14 16:03:18 字數 3426 閱讀 6430

解決的問題

外觀模式,正像它的名字。對於一些實現十分複雜,但使用者又沒必要知道這些複雜細節的時候,外觀模式可以提供乙個統一的簡單介面。外觀模式主要用於將層與層之間分離,提供簡單介面等等功能。

類圖結構

在圖中,facade是外觀類,知道哪些子系統負責處理請求,將客戶的請求**給適當的字系統物件。下面四個子類是子系統類的集合,實現子系統的功能,處理facade物件指派的任務。子類中沒有facade的任何資訊。

四個子系統的**:

public class subsystemone

}public class subsystemtwo

}public class subsystemthree

}public class subsystemfour

}

外觀類:

public class facade

public void methoda()

public void methodb()

}

好處與壞處

優點在之前的介紹中都寫過了,外觀模式可以簡化系統的呼叫,同時符合迪公尺特法則,降低了應用層和子系統之間的耦合度。也正因如此,外觀模式的缺點也就體現在不符合開閉原則。在我們拓展子系統的時候,必然要去修改子系統的**,這顯然違背了開閉原則。

解決的問題

建造者模式,將乙個複雜物件的構建和它的表示分離,使得同樣的構建過程可以建立不同的表示。多用於在將乙個複雜物件的構建與表示分離的情況下。在這種模式下,使用者只需指定建造的型別即可得到乙個物件,而無需知道具體的構建細節。

類圖結構

如圖,builder代表乙個建造者類,是乙個為建立乙個product物件的各個部件指定的抽象介面。concretebuilder是具體的建造者,實現了builder介面,構造和裝配各個部件。director類為指揮者類,是構建乙個使用builder介面的物件。product自然是具體的產品類了,不用多說了。

product類:

public class product

public void show()}}

builder類

public abstract class builder
concretebuilder類

public class concretebuilder extends builder

@override

public void buildpartb()

@override

public product getresult()

}

director類:

public class director

}

好處與壞處

好處為,使用建造者模式可以使得客戶端不必知道產品內部組成的細節,具體的建造者類之間是互相獨立的,這有助於系統的擴充套件。但由於建造者模式建立的產品大多都具有類似的特徵,因此建造者模式的使用範圍很窄。如果產品的內部變化複雜,會需要很多的具體建造者類來實現,會讓系統變得十分複雜。

解決的問題

觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。讓這個主題物件在狀態發生變化的時候會自動通知所有觀察者物件,使得他們可以自己更新自己。

類圖結構

subject類,它把所有的觀察者物件的引用儲存在乙個聚集裡,每個主題可以有任意數量的觀察者,抽象主題提供乙個可以增加和刪除觀察者物件的介面。observer類,抽象觀察者,為所有的具體觀察者定義乙個介面,在得到主題的通知時更新自己。concreteobserver類,具體觀察者,實現了抽象觀察者角色所要求的更新介面,以便使本身的狀態與主題的狀態相一致。concretesubject類,具體主題,將有關狀態存入具體觀察者物件,在具體主題的內部狀態改變時,給所有登記的觀察者發出通知。

subject類:

public abstract class subject

public void detach(observer observer)

public void notify()}}

observer類:

public abstract class observer
concretesubject類:

public class concretesubject extends subject

public void setsubjectstate(string subjectstate)

}

concreteobserver類:

public class concreteobserver extends observer

@override

public void update()

public concretesubject getsubject()

public void setsubject(concretesubject subject)

}

好處與壞處

觀察者模式的效果有以下的優點:

第一、觀察者模式在被觀察者和觀察者之間建立乙個抽象的耦合。被觀察者角色所知道的只是乙個具體觀察者列表,每乙個具體觀察者都符合乙個抽象觀察者的介面。被觀察者並不認識任何乙個具體觀察者,它只知道它們都有乙個共同的介面。

第二、觀察者模式支援廣播通訊。被觀察者會向所有的登記過的觀察者發出通知,

觀察者模式有下面的缺點:

第一、如果乙個被觀察者物件有很多的直接和間接的觀察者的話,將所有的觀察者都通知到會花費很多時間。

第二、如果在被觀察者之間有迴圈依賴的話,被觀察者會觸發它們之間進行迴圈呼叫,導致系統崩潰。在使用觀察者模式是要特別注意這一點。

第三、如果對觀察者的通知是通過另外的執行緒進行非同步投遞的話,系統必須保證投遞是以自恰的方式進行的。

第四、雖然觀察者模式可以隨時使觀察者知道所觀察的物件發生了變化,但是觀察者模式沒有相應的機制使觀察者知道所觀察的物件是怎麼發生變化的。

《大話設計模式》讀書筆記(四)

本文上接 大話設計模式 讀書筆記 三 本次主要介紹三種設計模式,外觀模式,建造者模式和觀察者模式。解決的問題 外觀模式,正像它的名字。對於一些實現十分複雜,但使用者又沒必要知道這些複雜細節的時候,外觀模式可以提供乙個統一的簡單介面。外觀模式主要用於將層與層之間分離,提供簡單介面等等功能。類圖結構 在...

大話設計模式 筆記

簡單工廠模式 建立物件 switch 靜態工廠 策略模式 封裝變化 商品售賣 裝飾模式 在類的外部封裝新的功能 外部類要擁有對目標類的引用 模式 小明託小白追小紅 小明小紅豆實現了追求的介面 小白的實現追求介面呼叫小明的追求方法 工廠方法模式 與簡單工廠模式的區別 工廠模式是簡單工廠模式的進一步抽象...

《大話設計模式 工廠模式》筆記

1 簡單工廠模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關的類,對於客戶端來說,除去了與具體產品的依賴。2 簡單工廠模式的問題 新增需要生產的類時,需要修改類的 違背了開放 封閉原則。3 工廠方法模式 factory method 定義乙個用於建立物件的介面,讓子...