开发者

Java结构型模式中的组合模式详解

开发者 https://www.devze.com 2023-02-17 10:42 出处:网络 作者: 非凡的小笨鱼
目录一.介绍二.UML类图1.透明方式2.安全方式三.具体代码四.使用场景五.优点一.介绍
目录
  • 一.介绍
  • 二.UML类图
    • 1.透明方式
    • 2.安全方式
  • 三.具体代码
    • 四.使用场景
      • 五.优点

        一.介绍

        组合模式(Composite Pattern)属于结构型模式。组合模式又叫作部分整体模式,它是一种将对象组合成树状层次结构的模式,用来表示整体-部分的关系,使用户对单个对象和www.devze.com组合对象具有一致的访问性。组合模式有透明方式和安全方式两种实现方式

        Java结构型模式中的组合模式详解

        二.UML类图

        1.透明方式

        • 抽象节点中定义了规编程范,客户端无需区别叶子节点和树枝节点,使用方便
        • 叶子节点本来无add、remove、getChild方法,但是因为抽象中定义了规范,所以必须实现它们,会带来一些安全性问题

        Java结构型模式中的组合模式详解

        2.安全方式

        • 客户端需要区别叶子节点和树枝节点,使用不方便
        • 叶子节点无add、remove、getChild方法,不存在安全性问题

        Java结构型模式中的组合模式详解

        三.具体代码

        业务代码

        /js/抽象节点
        public abstract class Component {
            abstract void add(Component component);
            abstract void remove(Component component);
            abstract Component getChild(int i);
            abstract void ope编程客栈ration开发者_JAV培训();
        }
        //叶子节点
        class Leaf extends Component{
            private String name;
            public Leaf(String name) {
                this.name = name;
            }
            @Override
            void add(Component component) {}
            @Override
            void remove(Component component) {}
            @Override
            Component getChild(int i) {
                return null;
            }
            @Override
            void operation() {
                System.out.print(name);
            }
        }
        //树枝节点
        class Composite extends Component{
            private ArrayList<Component> children = new ArrayList<>();
            @Override
            void add(Component component) {
               children.add(component);
            }
            @Override
            void remove(Component component) {
                children.remove(component);
            }
            @Override
            Component getChild(int i) {
                return children.get(i);
            }
            @Override
            void operation() {
                children.forEach(Component::operation);
            }
        }

        客户端

        public class Client {
            public static phpvoid main(String[] args) {
                Component level1 = new Composite();
                level1.add(new Leaf("1"));
                level1.add(new Leaf("2"));
                Component level2 = new Composite();
                level2.add(new Leaf("2.1"));
                level1.add(level2);
                level1.operation();
            }
        }
        

        四.使用场景

        • 需要表示一个对象整体与部分的层次结构
        • 要求对用户隐藏组合对象与单个对象的不同,用户可以使用统一的接口操作组合结构中的所有对象
        • 组织机构树
        • 文件/文件夹

        五.优点

        • 简化了客户端代码(客户端一致地处理单个对象和组合对象)
        • 符合开闭原则(新增具体实现类不需要更改源代码)

        到此这篇关于Java结构型模式中的组合模式详解的文章就介绍到这了,更多相关Java组合模式内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

        0

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        关注公众号