组合设计模式

一、组合模式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

  • 当发现需求中是体现部分与总体层次结构时,以及你但愿用户能够忽略组合对象与单个对象的不一样
  • 统一地使用组合结构中的全部对象时,就应该考虑组合模式了
相关文章
相关标签/搜索