java设计模式之组合模式

组合模式

组合模式的作用:由于容器对象与叶子对象在功能上有所区别,在使用这些对象的客户端代码中必须有区别的对待容器对象与叶子对象,然而我们在使用它们的时候,希望一致的处理他们,因为对这些对象的区别对待会使程序变得非常复杂。 组合模式描述了如何将容器对象和叶子对象进行递归组合,让我们在使用它们时,不需要进行区别对待,可以一致的对待容器对象和叶子对象。

结合下面的例子,可以很好的理解组合模式。

import java.util.ArrayList;  
import java.util.List;  
  
public class PayDemo {  
  
    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() {  
            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);  //总店添加分店
       /* List< Market> list1 = rootBranch.list; 
        for (Market market : list1) {
			System.out.println(market);
		}*/
        rootBranch.PayByCard();  
    }  
}  











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值