設計模式之組合模式

組合模式

組合UML.png
interface View{
    void getBackground();
}

View頂層接口,隨便搞個獲取背景方法,不要在意沒有返回值哈哈

class TextView implements View{
    public TextView(){
        //迷人的無參構造方法
    }
    public void getBackground(){
        
    }
}   

文字類,實現View接口。

class ImageView implements View{
    public ImageView(){
        //我也是個無參構造函數
    }
    public void getBackground(){
    
    }
}   

圖片類,實現View接口

class ViewGroup implements View{
    private List<View> viewList = new ArrayList<View>();
    public void addView(View view){
        viewList.add(view);
    }
    
    public void deleteView(View view){
        viewList.remove(view);
    }
    
    public void getBackground(){
        for(View view : viewList){
            view.getBackground();
        }
    }
}   

ViewGroup類 ,容器構件

class Client{
    public static void main(String[] args){
        View viewGroup,textView,imageView;
        textView = new TextView();
        imageView = new ImageView();
        viewGroup = new ViewGroup();
        viewGroup.add(textView);
        viewGroup.add(imageView);
        viewGroup.getBackground();
    }
}

客戶端類

優點

  1. 組合模式可以清楚地定義分層次的復雜對象,表示對象的全部或部分層次,它讓客戶端忽 略了層次的差異,方便對整個層次結構進行控制。

  2. 客戶端可以一致地使用一個組合結構或其中單個對象,不必關心處理的是單個對象還是整 個組合結構,簡化了客戶端代碼。

  3. 在組合模式中增加新的容器構件和葉子構件都很方便,無須對現有類庫進行任何修改,符 合“開閉原則”。

  4. 組合模式為樹形結構的面向對象實現提供了一種靈活的解決方案,通過葉子對象和容器對 象的遞歸組合,可以形成復雜的樹形結構,但對樹形結構的控制卻非常簡單。

缺點

在增加新構件時很難對容器中的構件類型進行限制。有時候我們希望一個容器中只能有某些
特定類型的對象,例如在某個文件夾中只能包含文本文件,使用組合模式時,不能依賴類型
系統來施加這些約束,因為它們都來自于相同的抽象層,在這種情況下,必須通過在運行時
進行類型檢查來實現,這個實現過程較為復雜。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 目錄 本文的結構如下: 引言 什么是組合模式 模式的結構 典型代碼 代碼示例 優點和缺點 適用環境 模式應用 一、...
    w1992wishes閱讀 920評論 0 2
  • 設計模式匯總 一、基礎知識 1. 設計模式概述 定義:設計模式(Design Pattern)是一套被反復使用、多...
    MinoyJet閱讀 3,983評論 1 15
  • 組合模式 組合模式,將對象組合成樹形結構以表示“部分-整體”的層次結構,組合模式使得用戶對單個對象和組合對象的使用...
    Binaryify閱讀 484評論 0 0
  • 一、組合模式的概念 先來一段官方概念:組合多個對象形成樹形結構以表示“整體-部分”的結構層次。組合模式對單個對象(...
    flyflyho閱讀 1,164評論 4 7
  • 我們是熟悉的兩個人 喜歡坐在一起望著遠處的天際出神 享受著春天的雨 無視來來往往的行人 我們是熟悉的兩個人 希望有...
    日夢白閱讀 278評論 0 1