![](https://img2023.cnblogs.com/blog/3076680/202307/3076680-20230704144741811-1382373830.png) # 1. 術語的定義 ## 1.1. 服務 ### 1.1.1. 指共同協作、以單元的形式對外提供功能的跨機器進 ...
結構型模式的思路是組合,而根據組合側重的不同方面,分為了不同的模式。
-
結構型模式的思路和行為型模式中的模板方法模式有一定相似性,尤其是在實現具體的函數時,不過不同之處在於模板方法模式採用的是繼承,並且它們的目的也不一樣,結構型模式的目的是擴展、增減功能,而模板方法模式的目的是泛化通用流程。
-
代理模式組合了一個提供具體功能的對象,然後為其它對象提供相同的介面;可以通過代理模式進行緩存、記錄log、訪問限制等操作,但主要的功能還是由其內部持有的提供服務的對象提供的。
-
由於代理對象和服務對象遵循相同的介面,因此它們可以互換。
-
相比之下裝飾器對象儘管和源服務對象擁有相同的介面,但它們無法互換使用,原因在於裝飾器對象依賴源對象來提供服務,裝飾器對象本身能夠增強服務功能,但並沒有真正實現服務功能,它是依賴於服務對象來實現功能的;這導致裝飾器模式受聲明順序的影響。
-
裝飾器模式像是個單鏈表。
-
可以聲明多個裝飾器類並動態配置裝飾器對象。
-
適配器模式與代理模式和裝飾器模式相比仍然依賴已有服務對象來提供功能,但不同的是,適配器對象使用已有服務來提供新的功能而不是實現與現有服務對象相同的介面。適配器模式一般用於實現需要用到遺留系統的功能的新的需求。
-
門面模式也提供新的功能,與適配器不同的是:適配器通常只封裝一個服務對象, 而門面對象作用的範圍更廣,通常會作用於整個對象子系統上。
代理模式
裝飾模式
class Application is
method dumbUsageExample() is
source = new FileDataSource("somefile.dat")
source.writeData(salaryRecords)
// 已將明碼數據寫入目標文件。
source = new CompressionDecorator(source)
source.writeData(salaryRecords)
// 已將壓縮數據寫入目標文件。
source = new EncryptionDecorator(source)
// 源變數中現在包含:
// Encryption > Compression > FileDataSource
source.writeData(salaryRecords)
// 已將壓縮且加密的數據寫入目標文件。
適配器模式
比如,已有服務能夠處理某種格式的數據,而新的業務要求使用另外一種格式,此時就可以創建適配器類來對數據格式進行轉換,使得仍然能夠復用已有服務來處理新需求。