組合設計模式

一、組合模式java

  • 將對象組合成樹形結構以表示 ‘部分-總體’ 的層次結構
  • 組合模式使得用戶對單個對象和組合對象的使用具備一致性

  • Component 
public abstract class Component {  
        String name;  
  
        public abstract void add(Component c);  
  
        public abstract void remove(Component c);  
  
        public abstract void eachChild();  
    }
  • 組合部件類Leaf
// 組合部件類  
    public class Leaf extends Component {  
  
        // 葉子節點不具有添加的能力,因此不實現  
        @Override  
        public void add(Component c) {  
            // TODO Auto-generated method stub  
            System.out.println("");  
        }  
  
        // 葉子節點不具有添加的能力必然也不能刪除  
        @Override  
        public void remove(Component c) {  
            // TODO Auto-generated method stub  
            System.out.println("");  
        }  
  
        // 葉子節點沒有子節點因此顯示本身的執行結果  
        @Override  
        public void eachChild() {  
            // TODO Auto-generated method stub  
            System.out.println(name + "執行了");  
        }  
  
    }
  • 組合類Composite 
// 組合類  
    public class Composite extends Component {  
  
        // 用來保存節點的子節點  
        List<Component> list = new ArrayList<Component>();  
  
        // 添加節點 添加部件  
        @Override  
        public void add(Component c) {  
            // TODO Auto-generated method stub  
            list.add(c);  
        }  
  
        // 刪除節點 刪除部件  
        @Override  
        public void remove(Component c) {  
            // TODO Auto-generated method stub  
            list.remove(c);  
        }  
  
        // 遍歷子節點  
        @Override  
        public void eachChild() {  
            // TODO Auto-generated method stub  
            System.out.println(name + "執行了");  
            for (Component c : list) {  
                c.eachChild();  
            }  
        }  
    }

二、舉例ide

public abstract class Market {  
        String name;  
  
        public abstract void add(Market m);  
  
        public abstract void remove(Market m);  
  
        public abstract void PayByCard();  
    }  
  
    // 分店 下面能夠有加盟店  
    public class MarketBranch extends Market {  
        // 加盟店列表  
        List<Market> list = new ArrayList<PayDemo.Market>();  
  
        public MarketBranch(String s) {  
            this.name = s;  
        }  
  
        @Override  
        public void add(Market m) {  
            // TODO Auto-generated method stub  
            list.add(m);  
        }  
  
        @Override  
        public void remove(Market m) {  
            // TODO Auto-generated method stub  
            list.remove(m);  
        }  
  
        // 消費以後,該分店下的加盟店自動累加積分  
        @Override  
        public void PayByCard() {  
            // TODO Auto-generated method stub  
            System.out.println(name + "消費,積分已累加入該會員卡");  
            for (Market m : list) {  
                m.PayByCard();  
            }  
        }  
    }  
  
    // 加盟店 下面不在有分店和加盟店,最底層  
    public class MarketJoin extends Market {  
        public MarketJoin(String s) {  
            this.name = s;  
  
        }  
  
        @Override  
        public void add(Market m) {  
            // TODO Auto-generated method stub  
  
        }  
  
        @Override  
        public void remove(Market m) {  
            // TODO Auto-generated method stub  
  
        }  
  
        @Override  
        public void PayByCard() {  
            // TODO Auto-generated method stub  
            System.out.println(name + "消費,積分已累加入該會員卡");  
        }  
    }  
  
    public static void main(String[] args) {  
        PayDemo demo = new PayDemo();  
          
        MarketBranch rootBranch = demo.new MarketBranch("總店");  
        MarketBranch qhdBranch = demo.new MarketBranch("秦皇島分店");  
        MarketJoin hgqJoin = demo.new MarketJoin("秦皇島分店一海港區加盟店");  
        MarketJoin btlJoin = demo.new MarketJoin("秦皇島分店二白塔嶺加盟店");  
          
        qhdBranch.add(hgqJoin);  
        qhdBranch.add(btlJoin);  
        rootBranch.add(qhdBranch);  
        rootBranch.PayByCard();  
    }

三、使用場景this

  • 當發現需求中是體現部分與總體層次結構時,以及你但願用戶能夠忽略組合對象與單個對象的不一樣
  • 統一地使用組合結構中的全部對象時,就應該考慮組合模式了
相關文章
相關標籤/搜索