设计模式_10_组合模式

 

原理:把一组相似的对象当做一个单一的对象,为的是减少数据类型(分成分级,树形菜单)

 

demo:

import java.util.ArrayList;
import java.util.List;

import com.alibaba.fastjson.JSON;

/*
 * 组合模式
 */
public class CombinationMode {
	
	//测试
	public static void main(String[] args) {
		DistrictNode root = new DistrictNode("根"); //根节点
		
		root.addChild(new DistrictNode("上海")); //一级目录
		root.addChild(new DistrictNode("天津")); //一级目录
		DistrictNode districtNode = new DistrictNode("北京");
		root.addChild(districtNode);            //一级目录
		
		districtNode.addChild(new DistrictNode("海淀区"));       //二级目录
		districtNode.addChild(new DistrictNode("大兴区"));       //二级目录
		DistrictNode districtNode2 = new DistrictNode("朝阳区"); //二级目录
		districtNode.addChild(districtNode2);
		
//		districtNode2.addChild(new DistrictNode("三里屯"));   //三级目录
//		districtNode2.addChild(new DistrictNode("朝阳外街"));  //三级目录
		districtNode2.addChild(new LeafNode("三里屯"));  //叶子结点
		districtNode2.addChild(new LeafNode("朝阳外街")); //叶子结点
		
		System.out.println(JSON.toJSON(root));
	}
}

abstract class Node{  //抽象结点
	private String name;
	public Node(String name){
		this.name = name;
	}
	public abstract List<Node> getChildren(); //子结点
	public String getName(){
		return name;
	}
}
class DistrictNode extends Node{  //结点
	public DistrictNode(String name) {
		super(name);
	}
	private List<Node> children = new ArrayList<Node>();
	@Override
	public List<Node> getChildren() {
		return children;
	}
	public void addChild(Node node){
		children.add(node);
	}
	public void delChild(int i){
		children.remove(i);
	}
}
class LeafNode extends Node{  //叶子结点
	public LeafNode(String name){
		super(name);
	}
	@Override
	public List<Node> getChildren() {
		return null;
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值