结构型模式之组合模式

组合模式

组合模式

点评:

/**
 * 组合模式
 * 将对象组合成数形结构
 * 以表示 部分 - 整体的层次结构
 * 使用户对单个对象和组合对象的使用具有一致性
 *
 * 使用场景:
 *  1.需要描述对象的部分和整体等级结构,如树形菜单,文件夹管理
 *  2.需要客户忽略个体构建和组合构建的区别,平等对待所有构件
 *
 *
 * 组合模式有3个角色
 * 1.抽象构件
 * 2.叶子构件
 * 3.树枝构件
 */
public class CompositePattern {

    //抽象构件
    interface Component{
        void operation();
    }

    //叶子构件
    static class Leaf implements Component{
        @Override
        public void operation() {
            //业务逻辑代码
        }
    }

    //树枝构件
    static class Composite implements Component{
        //构件容器
        private ArrayList<Component> componentArrayList = new ArrayList<>();
        //添加构件
        public void add(Component component){componentArrayList.add(component);}
        //删除构件
        public void remove(Component component){componentArrayList.remove(component);}
        //获取子构件
        public ArrayList<Component> getChild(){return this.componentArrayList;}

        @Override
        public void operation() {//业务逻辑代码
        }
    }

    //使用
    public static void main(String[] args) {
        //创建根节点
        Composite root = new Composite();
        root.operation();
        //创建树枝节点
        Composite branch = new Composite();
        //创建叶子节点
        Leaf leaf = new Leaf();
        //构建树形结构
        root.add(branch);
        branch.add(leaf);
    }

    //遍历树 (递归)
    public static void display(Composite root){
        for(Component c:root.getChild()){
            if(c instanceof Leaf)
                c.operation();
            else{
                c.operation();
                display((Composite)c);
            }
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容