Java设置模式之:Composite组合模式

1,定义一个接口,作为组合的枢纽进行传递

package com.org.composite;
//定义接口:用来指定说明要完成那些行为动作
public interface Component {
    public void doSomething();  
}    
2,定义一个实现类,作为树形结构的最低端,实际操作的也是该对象

package com.org.composite;
//实现Component接口,该类主要用来做一些业务逻辑或者其他动作的行为,实际存储操作的也是该对象
public class Leaf implements Component{
    @Override
    public void doSomething() {
        System.out.println("Leaf doSomething");          
    }
}
3,定义另一个实现类,作为树形结构的最顶端,作为组合模式中的实现者,里面包含组合的增删改查等操作方法,接口实现的方法作为两个实现类的互通方法

package com.org.composite;
import java.util.ArrayList;
import java.util.List;
//实现Component接口,用来做对象Leaf的增删改查,但这种方式是隐式的,实际操作的是Leaf。此时该对象可看作是Leaf,只不过不直接提供Leaf而是采用这种树形结构方法来进行组合传递
public class Composite implements Component{
     List childs = new ArrayList();        
        public void add(Component child)  
        {  
            this.childs.add(child);  
        }        
        public void remove(Component child)  
        {  
            this.childs.remove(child);  
        }        
        public Component getChild(int i)  
        {  
            return this.childs.get(i);  
        }
    public void doSomething()  
    {  
        //这里还包含迭代的思想,如果child是Leaf,则直接调用Leaf的doSomething方法,如果是Component的child,则此时的doSomething方法是Component
        //中的方法,相当于迭代循环
        for (Component child : childs)  
            child.doSomething();  
    }
}
4,开始测试

package com.org.composite;
public class Client {
    public static void main(String[] args)  
    {  
        /**
         *           composite1
         *           /      \
         *        leaf1   composite2
         *                  /   \
         *               leaf2  leaf3    
         *     Component为中间枢纽,将Leaf向上造型后利用Component来做操作,然后利用接口的特性即可操作Composite方法     
         *                
         * */  
        Component leaf1=new Leaf();  
        Component leaf2=new Leaf();  
        Component leaf3=new Leaf();  
        Composite composite1=new Composite();  
        Composite composite2=new Composite();           
        composite2.add(leaf2);  
        composite2.add(leaf3);  
        composite1.add(leaf1);  
        composite1.add(composite2);           
        composite1.doSomething();           
    }  
}


你可能感兴趣的:(java基础)