对设计模式—Composite模式的认识

Composite模式定义:
将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性.
Composite好处:
1.使客户端调用简单,客户端可以一致的使用组合结构或其中单个对象,用户就不必关系自己处理的是单个对象还是整个组合结构,这就简化了客户端代码。
2.更容易在组合体内加入对象部件. 客户端不必因为加入了新的对象部件而更改代码

 如一棵树有树枝和叶子,树枝也有叶子,叶子为最小的部分.从大到小顺序Tree->Limb->Leaf
public abstract class Component
{
    public String name;

    public ArrayList<Component> list;


    public Boolean Add(Component item)
    {
        return false;
    }

    public Boolean Remove(Component item)
    {
        return false;
    } 

    public abstract void print();

    public abstract void Operation();

}
public class CompositeComponent extends Component
{

    public CompositeComponent()
    {
        list = new ArrayList<Component>();
    }

    @Override
    public void Operation()
    {
        for (Component item : list)
        {
            item.print();
            item.Operation();
        }
    }

    public Boolean Add(Component item)
    {
        list.add(item);
        return true;
    } 

    public Boolean Remove(Component item)
    {
        int i = list.indexOf(item);
        if (i > 0)
        {
            list.remove(i);
        }
        return true;
    }

    public void print()
    {
           System.out.println("This is  Root");
    }

}
public class LimbCoponent extends CompositeComponent
{
    public void print()
    {
        System.out.println(name);
    }
}
public class Leaf extends Component
{

    @Override
    public void print()
    {
        System.out.println(name);
    }
    public void Operation()
    {
        System.out.println("Defoliation on wings");
    }

}
public class TestComposite
{
    public static void main(String[] args)
    {
        Component tree = new CompositeComponent();
        Component leaf = new Leaf();
        Component limb = new LimbCoponent();
        limb.name = "This is an limb";
        leaf.name = "This is an leaf";
        limb.Add(leaf);
        tree.Add(limb);
        tree.Operation();      
        
    }
}


你可能感兴趣的:(设计模式)