前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >组合模式实例商品类别树

组合模式实例商品类别树

作者头像
Twcat_tree
发布2022-11-30 17:15:58
2400
发布2022-11-30 17:15:58
举报
文章被收录于专栏:二猫の家

1.题目: 有一个根节点,比如“服装”,它没有父节点,它可以包含其他的节点。 树枝节点,有一类节点可以包含其他的节点,称之为树枝节点,比如“男装”、“女装”和“母婴”。 叶子节点,有一类节点没有子节点,称之为叶子节点,比如“衬衣”、“夹克”、“裙子”、“套装”等。 如果碰到类似上面这种,需使用对象树来描述或实现的功能,都可以考虑使用组合模式,比如读取XML文件,或是对语句进行语法解析等。 2.UML图

在这里插入图片描述
在这里插入图片描述

3.代码

代码语言:javascript
复制
package 组合模式;

public abstract class Cloth {

protected String name;
public Cloth(String name)
{this.name=name;
}
public abstract void Add(Cloth c);
public abstract void Remove(Cloth c);
public abstract void display(String str);
}
代码语言:javascript
复制
package 组合模式;

import java.util.ArrayList;
public class ConcreteCloth extends Cloth {

	private ArrayList<Cloth>children=new ArrayList<Cloth>();
	public ConcreteCloth(String name)
	{
		super(name);
	}
	@Override
	public void Add(Cloth c) {
		children.add(c);
	}
 
	@Override
	public void Remove(Cloth c) {
		children.remove(c);
	}
 
	@Override
	public void display(String str) {
		str+="-";
		System.out.println(str+name);
		for(Cloth component:children)
		{component.display(str);
		}
	}
}
代码语言:javascript
复制
package 组合模式;

public class Custome extends Cloth {
	public Custome(String name) {
		super(name);
	}
 
	@Override
	public void Add(Cloth c) { 
	}
 
	@Override
	public void Remove(Cloth c) {
	}
 
	@Override
	public void display(String str) {
	str+="-";
	System.out.println(str+name);
 
	}

}
代码语言:javascript
复制
package 组合模式;

public class Jacket extends Cloth {

	public Jacket(String name) {
		super(name);
	}

	@Override
	public void Add(Cloth c) {
	}

	@Override
	public void Remove(Cloth c) {
	}

	@Override
	public void display(String str) {
		str+="-";
		System.out.println(str+name);

	}

}
代码语言:javascript
复制
package 组合模式;

public class Shirt extends Cloth {

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

	@Override
	public void Add(Cloth c) {
		// TODO Auto-generated method stub

	}

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

	}

	@Override
	public void display(String str) {
		str+="-";
		System.out.println(str+name);
	}

}
代码语言:javascript
复制
package 组合模式;

public class Skirt extends Cloth {

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

	@Override
	public void Add(Cloth c) {
		// TODO Auto-generated method stub

	}

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

	}

	@Override
	public void display(String str) {
		str+="-";
		System.out.println(str+name);
	}

}
代码语言:javascript
复制
package 组合模式;

public class Test {

	public static void main(String[] args) {
		ConcreteCloth root=new ConcreteCloth("服装");
		ConcreteCloth comp1=new ConcreteCloth("男装");
		ConcreteCloth comp2=new ConcreteCloth("女装");
		comp1.Add(new  Shirt("衬衫"));
		comp1.Add(new Jacket("夹克"));
		comp2.Add(new Skirt("裙子"));
		comp2.Add(new Custome("礼服"));
			root.Add(comp1);
			root.Add(comp2);
			root.display("");
	}

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档