首页 > 编程 > Java > 正文

java设计模式之组合模式

2019-11-11 07:54:16
字体:
来源:转载
供稿:网友

组合模式:允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。

组合模式类图: 这里写图片描述 Client:客户使用Component接口操作组合中的对象。 Component:Component为组合中的所有对象定义一个接口,不管是组合还是节点,Component可以为add(),remove(),eachChild()实现一些默认的行为。 Leaf:叶节点没有孩子。叶节点通过实现Composite支持的操作,定义了组合内元素的行为。 Composite:Composite的角色是要定义组件的行为,而这样的组件具有子节点。

抽象类Component代码实现:

public abstract class Component { String name; public Component(String name){ this.name = name; } public abstract void Add(Component component); public abstract void remove(Component component); public abstract void eachChild();}

Leaf类代码实现:

public class Leaf extends Component{ public Leaf(String name) { super(name); // TODO Auto-generated constructor stub } @Override public void Add(Component component) { // TODO Auto-generated method stub } @Override public void remove(Component component) { // TODO Auto-generated method stub } @Override public void eachChild() { // TODO Auto-generated method stub System.out.PRintln("叶节点:"+name); }}

Composite类代码实现:

public class Composite extends Component{ ArrayList<Component> list = new ArrayList<Component>(); public Composite(String name) { super(name); // TODO Auto-generated constructor stub } @Override public void Add(Component component) { // TODO Auto-generated method stub list.add(component); } @Override public void remove(Component component) { // TODO Auto-generated method stub list.remove(component); } @Override public void eachChild() { // TODO Auto-generated method stub System.out.println("节点:"+name); for(Component component : list){ component.eachChild(); } }}

Client类代码实现:

public class Client { public static void main(String[] args){ Component rootComposite = new Composite("根节点"); Component leftComposite = new Composite("左子节点"); Component rightComposite = new Composite("右子节点"); Component leftleaf1 = new Leaf("左叶节点1"); Component leftleaf2 = new Leaf("左叶节点2"); leftComposite.Add(leftleaf1); leftComposite.Add(leftleaf2); rootComposite.Add(leftComposite); rootComposite.Add(rightComposite); rootComposite.eachChild(); }}

运行结果:

节点:根节点节点:左子节点叶节点:左叶节点1叶节点:左叶节点2节点:右子节点
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表