组合模式是专门用来解决树形结构的问题的:
package com.djk.design.struct.compose;
public interface Component
{
void add(Component component);
void reomve(Component component);
void action();
}
package com.djk.design.struct.compose;
import java.util.ArrayList;
import java.util.List;
public class Compose implements Component
{
private String name;
public Compose(String name) {
super();
this.name = name;
}
private List<Component> list = new ArrayList<Component>();
@Override
public void action()
{
System.out.println("Compose========"+name);
for (Component component : list)
{
if (null != component)
{
component.action();
}
}
}
@Override
public void add(Component component)
{
if (null == component)
{
return ;
}
if (!list.contains(component))
{
list.add(component);
}
}
@Override
public void reomve(Component component)
{
list.remove(component);
}
}
package com.djk.design.struct.compose;
public class Leaf implements Component
{
private String name;
public Leaf(String name) {
super();
this.name = name;
}
@Override
public void action()
{
System.out.println(name);
}
@Override
public void add(Component component)
{
throw new RuntimeException("leaf can not add component");
}
@Override
public void reomve(Component component)
{
throw new RuntimeException("leaf can not remove component");
}
}
package com.djk.design.struct.compose;
public class Client
{
public static void main(String[] args)
{
Component breakfast = new Compose("早餐");
Component food = new Compose("饭");
food.add(new Leaf("大米饭"));
food.add(new Leaf("粥"));
breakfast.add(food);
Component water = new Compose("饮料");
water.add(new Leaf("白开水"));
water.add(new Leaf("牛奶"));
breakfast.add(water);
breakfast.action();
}
}