結構型模式:優化軟件結構的策略
- 代理模式(Proxy Pattern)
代理模式就像一個經紀人,代表真實對象進行操作。比如,在網絡訪問中,我們可能會通過代理服務器來訪問外部網站。在軟件中,當一個對象由于某些原因(如訪問權限限制、創建開銷大等)不能直接訪問另一個對象時,可以通過代理對象來間接訪問。代理對象可以在訪問真實對象前后添加一些額外的邏輯,如權限驗證、緩存處理等。 - 適配器模式(Adapter Pattern)
想象你有一個歐式插頭的電器,但家里只有美式插座,這時候就需要一個轉換插頭(適配器)來讓電器正常使用。在軟件中,適配器模式用于將一個類的接口轉換成客戶希望的另一個接口。當我們需要使用一個現有的類,但它的接口與我們的需求不兼容時,就可以使用適配器模式。例如,有一個舊的支付接口,新的業務系統需要與之集成,但新系統使用的是不同的接口規范,這時候就可以創建一個適配器類,將舊支付接口適配成新系統可以使用的接口。 - 橋接模式(Bridge Pattern)
橋接模式將抽象部分與實現部分分離,使它們可以獨立變化。以手機為例,手機有不同的品牌(抽象部分),每個品牌又可以有不同的操作系統(實現部分)。如果不使用橋接模式,可能每個品牌的手機都要和每個操作系統進行組合,導致類的數量急劇增加。而使用橋接模式,將品牌和操作系統分離,通過一個橋接接口進行關聯,這樣當新增一個品牌或者一個操作系統時,只需要添加相應的類,而不需要修改其他類的代碼,提高了系統的可維護性和擴展性。 - 裝飾器模式(Decorator Pattern)
裝飾器模式就像給蛋糕添加不同的裝飾,在不改變對象本身的基礎上,動態地給對象添加新的功能。比如,一個簡單的咖啡對象,我們可以通過裝飾器為它添加牛奶、糖、奶油等不同的配料,從而得到不同口味的咖啡。在軟件中,當需要在運行時給對象添加功能,而又不想通過繼承的方式來擴展類時,裝飾器模式是一個很好的選擇。它通過創建一個裝飾器類,將被裝飾的對象作為成員變量,在裝飾器類中可以調用被裝飾對象的方法,并添加新的功能。 - 外觀模式(Facade Pattern)
外觀模式提供了一個統一的接口,用來訪問子系統中的一群接口。就像電腦的開機鍵,按下它就可以啟動電腦的各個硬件組件,而用戶不需要了解每個硬件組件是如何啟動的。在軟件中,當一個系統由多個復雜的子系統組成,客戶端需要與這些子系統進行交互時,使用外觀模式可以提供一個簡單的接口,隱藏子系統的復雜性,降低客戶端與子系統之間的耦合度。 - 享元模式(Flyweight Pattern)
享元模式旨在復用對象,減少對象的創建數量,以提高系統的性能。比如在一個圍棋游戲中,棋盤上有大量的棋子,每個棋子的顏色、形狀等屬性是相同的,只是位置不同。我們可以將這些相同屬性的棋子共享,只創建少量的棋子對象,通過改變它們的位置來表示不同的棋子。在軟件中,當有大量相似對象存在,且這些對象的創建和銷毀開銷較大時,享元模式可以有效地減少內存占用,提高系統的運行效率。 - 組合模式(Composite Pattern)
組合模式用于將對象組合成樹形結構,以表示 “部分 - 整體” 的層次關系。例如,在一個文件系統中,文件夾可以包含文件和子文件夾,文件和文件夾都可以看作是節點,通過組合模式可以方便地對整個文件系統進行遍歷、操作等。組合模式使得客戶端可以統一對待單個對象和組合對象,簡化了代碼的實現。