您的位置:首页 > 其它

合成模型模式

2006-11-16 11:59 225 查看
    合成模型模式属于对象的结构模式。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系,合成模式可以使客户端将单纯元素与复合元素同等看待。
    在合成模式的树结构中,有两种节点,一种是无子节点的树叶节点,一种是有子节点的树枝节点。树枝节点是本模式的核心,可称为合成类。在整个合成模式的类结构中,除了两种节点外,还有它们的公共抽象接口。
    合成模式所涉及到的主要内容就是把不同的元件纳入到树中来,并分为两种节点来管理。一个容易理解的例子就是文件系统:在文件系统中,目录可以看作是树枝节点,文件可以看成是树叶节点。
    合成模式又可以分为两种:
    一种是安全型:在接口中不定义合成类所具有的管理方法,比如add、remove等,这样,树叶节点就不用实现这些方法。这种类型的好处是方法严密,但接口不整齐;
    另一种是透明型:在接口中定义合成类所具有的管理方法,这样,合成类和树叶类都要实现这些方法,树叶类所提供的方法当然是无意义的。这种类型的好处是接口整齐,但有些混乱。
    以下是这两种类型合成模式的示例: 


package composite.safe;






public interface Component ...{




    public void function();


    


}






package composite.safe;




import java.util.*;






public class Composite implements Component ...{




    private Vector vector = new Vector();


    




    public void function() ...{


        System.out.println(this + ".function()");


    }


    




    public void add(Component c) ...{


        vector.add(c);


    }


    




    public void remove(Component c) ...{


        vector.remove(c);


    }


    




    public Enumeration components() ...{


        return vector.elements();


    }


    


}






package composite.safe;






public class Leaf implements Component ...{






    public void function() ...{


        System.out.println(this + ".function()");


    }




}






package composite.transparent;




import java.util.Enumeration;






public interface Component ...{




    public void function();


    


    public void add(Component c);


    


    public void remove(Component c);


    


    public Enumeration components();


    


}






package composite.transparent;




import java.util.Enumeration;


import java.util.Vector;




import composite.safe.Component;






public class Composite implements Component ...{




private Vector vector = new Vector();


    




    public void function() ...{


        System.out.println(this + ".function()");


    }


    




    public void add(Component c) ...{


        vector.add(c);


    }


    




    public void remove(Component c) ...{


        vector.remove(c);


    }


    




    public Enumeration components() ...{


        return vector.elements();


    }




}






package composite.transparent;




import java.util.Enumeration;






public class Leaf implements Component ...{






    public void function() ...{


        System.out.println(this + ".function()");


    }






    public void add(Component c) ...{




    }






    public void remove(Component c) ...{


        


    }






    public Enumeration components() ...{


        return null;


    }




}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息