设计模式(九)组合模式

1. 前言:

  1. 使用场景:
    部分、整体场景。比如:树形菜单、文件文件夹的管理

  2. 优点:
    高层模块调用简单,节点自由增加。

  3. 缺点
    当系统业务复杂时,实现组合模式将会非常困难,并非所有组件的业务都是一致的,而对于这将造成不可避免的冗余。比如:root节点需要提供层级缩略图功能,但是子节点并不需要,但是由于使用了组合模式则每个对象都有同样的代码,这导致无谓的浪费。

例子:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>

</body>
<script>
    class Employee {
        constructor(name, dept, sal) {
            this.name = name;
            this.dept = dept;
            this.sal = sal;
            this.subordinates = [];
        }

        add(sub){
            this.subordinates.push(sub);
        }
    }

    let CEO = new Employee("boss", "CEO", 30000);
    let headSales = new Employee("Robert", "Head Sales", 20000);

    let headMarketing = new Employee("Michel", "Head Marketing", 20000);

    let clerk1 = new Employee("Laura", "Marketing", 10000);
    let clerk2 = new Employee("Bob", "Marketing", 10000);

    let salesExecutive1 = new Employee("Richard", "Sales", 10000);
    let salesExecutive2 = new Employee("Rob", "Sales", 10000);

    CEO.add(headSales);
    CEO.add(headMarketing);

    headSales.add(salesExecutive1);
    headSales.add(salesExecutive2);

    headMarketing.add(clerk1);
    headMarketing.add(clerk2);
    console.log(CEO);

</script>

</html>

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值