设计模式之组合模式

组合模式:“ 将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

Composite模式好处:
        1.使客户端调用简单,客户端可以一致的使用组合结构或其中单个对象,用户就不必关系自己处理的是单个对象还是整个组合结构,这就简化了客户端代码。
        2.更容易在组合体内加入对象部件. 客户端不必因为加入了新的对象部件而更改代。

   一个总公司下面有部门和分公司,分公司下面也有部门和分公司。



 1.组合模式的例子

public abstract class GongSi {
	String name;
	public GongSi(String name)
	{
		this.name=name;
	}
	public void ShowName()
	{
		System.out.println(name);
	}
	public abstract void add(GongSi gongSi);
	public abstract void remove(GongSi gongSi);
	public abstract void iterate();
}
public class BuMen extends  GongSi{	
	public BuMen(String name) {
		super(name);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void add(GongSi gongSi) {
		// TODO Auto-generated method stub
	}

	@Override
	public void remove(GongSi gongSi) {
		// TODO Auto-generated method stub
	}

	@Override
	public void iterate() {
		// TODO Auto-generated method stub
		System.out.println(name);
	}

}

public class FenGongSi extends GongSi{

	private ArrayList<GongSi> list=new ArrayList<GongSi>();
	public FenGongSi(String name) {
		super(name);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void add(GongSi zongGongSi) {
		// TODO Auto-generated method stub
		list.add(zongGongSi);
	}
	@Override
	public void remove(GongSi gongSi) {
		// TODO Auto-generated method stub
		list.remove(gongSi);
	}

	@Override
	public void iterate() {
		// TODO Auto-generated method stub
		System.out.println(name);
		  for (GongSi c : list) {  
             c.iterate();
          }  
	}
}

	public static void main(String[] args) {
		FenGongSi fenGongSi=new FenGongSi("总公司");
		fenGongSi.add(new BuMen("总公司下部门1"));
		fenGongSi.add(new BuMen("总公司下部门2"));
		FenGongSi fengongsi1=new FenGongSi("总公司下分公司1");
		fenGongSi.add(fengongsi1);
		FenGongSi fengongsi2=new FenGongSi("总公司下分公司2");
		fenGongSi.add(fengongsi2);
		
		FenGongSi fengongsi11=new FenGongSi("总公司下分公司1分部门1");
		fengongsi1.add(fengongsi11);
		FenGongSi fengongsi12=new FenGongSi("总公司下分公司1分部门2");
		fengongsi1.add(fengongsi12);
		
		FenGongSi fengongsi21=new FenGongSi("总公司下分公司2分部门1");
		fengongsi2.add(fengongsi21);
		FenGongSi fengongsi22=new FenGongSi("总公司下分公司2分部门2");
		fengongsi2.add(fengongsi22);
		fenGongSi.iterate();
	}
运行结果:

总公司
总公司下部门1
总公司下部门2
总公司下分公司1
总公司下分公司1分部门1
总公司下分公司1分部门2
总公司下分公司2
总公司下分公司2分部门1
总公司下分公司2分部门2

     

      3.什么情况下使用组合模式

       引用大话设计模式的片段:“当发现需求中是体现部分与整体层次结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑组合模式了。”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值