组合模式—商品类别树的构建

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

通俗讲就拿一棵树来说,从树根向上生长,可以将树的结点分为两种,一种是叶子结点,叶子节点下面不可再分,另一种是树杈或者树枝,这种结点可以再往下分为叶子结点。这两种结点的性质不同,也就是属性不一样,在进行操作时也会不一样,而组合模式是将操作对这两种不同的结点具有一致性。这只一个不恰当的比喻。

书中的分公司和部门之间的关系更加形象。

下面写另外一个例子:

用组合模式重新实现商品类别树的构建(代

码+UML类图)

+服装

+男装

-衬衣

-夹克

+女装

-裙子

-套装

 

package 构建商品类别树;

public abstract class Component {
	protected String name;

	public Component(String name) {
		super();
		this.name = name;
	}
	public abstract void Add(Component c);
	public abstract void Remove(Component c);
	public abstract void Display(String preStr);

}



package 构建商品类别树;

public class Leaf extends Component {
	

	public Leaf(String name) {
		super(name);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void Add(Component c) {
		System.out.println("Cannot add to a leaf");
		// TODO Auto-generated method stub

	}

	@Override
	public void Remove(Component c) {
		System.out.println("Cannot remove from a leaf");
		// TODO Auto-generated method stub

	}

	@Override
	public void Display(String preStr) {
		System.out.println(preStr+"-"+name);
		// TODO Auto-generated method stub

	}

}



package 构建商品类别树;


import java.util.ArrayList;
import java.util.Collection;

public class Composite extends Component {
	//private List<Component> children=new List<Component>();
	private Collection<Component> children=new ArrayList<Component>();
	
	public Composite(String name) {
		super(name);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void Add(Component c) {
		children.add(c);
		// TODO Auto-generated method stub

	}

	@Override
	public void Remove(Component c) {
		// TODO Auto-generated method stub

	}

	@Override
	public void Display(String preStr) {
		System.out.println(preStr+"+"+this.name);
		preStr+="";
		for(Component component:children) {
			component.Display(preStr);
		}
		// TODO Auto-generated method stub

	}

}




package 构建商品类别树;

public class Client {

	public static void main(String[] args) {
		Composite root=new Composite("服装");
		Composite c1=new Composite("男装");
		Composite c2=new Composite("女装");
		Leaf leaf1=new Leaf("衬衣");
		Leaf leaf2=new Leaf("夹克");
		Leaf leaf3=new Leaf("裙子");
		Leaf leaf4=new Leaf("套装");
		root.Add(c1);
		root.Add(c2);
		c1.Add(leaf1);
		c1.Add(leaf2);
		c2.Add(leaf3);
		c2.Add(leaf4);
		root.Display(" ");
		// TODO Auto-generated method stub

	}

}

 

  • 18
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值