0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

组合模式(Composite Pattern)的用法

冬至子 ? 来源:全栈开发的码农 ? 作者:全栈开发的码农 ? 2023-06-01 15:30 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

组合模式主要是为了表达“部分-整体”的层次结构,例如公司的组织架构,每个部门下又有若干个下级部门,再如菜单结构,每个菜单下可能有一个或多个子菜单。

下例以员工的层级结构说明组合模式的用法。每个员工都有姓名、部门、工资等属性,每个员工可能有0个或多个下属员工。

图片

Employee类的代码如下:

package composite;


import java.util.ArrayList;
import java.util.List;


public class Employee {
  private String name;
  private String department;
  private int salary;
  private List < Employee > subordinates;
  //构造函数
  public Employee(String name, String department, int salary) {
    this.name=name;
    this.department=department;
    this.salary=salary;
    this.subordinates=new ArrayList < Employee > ();
  }
  //添加下属
  public void add(Employee employee) {
    subordinates.add(employee);
  }
  //移除下属
  public void remove(Employee employee) {
    subordinates.remove(employee);
  }
  //获取下属
  public List < Employee > getSubordinates(){
    return subordinates;
  }
  //转成字符串
  public String toString() {
    return "员工(姓名:"+name+",部门:"+department+",工资:"+salary+")";
  }
}

主函数调用方式:

package main;
import composite.*;


public class CompositePattern {
  public static void main(String[] args) {
    //创建一个员工:总裁
    Employee president = new Employee("李刚","管理层",30000);
    //创建两个员工:部门领导
    Employee directorSales = new Employee("王孟","销售部",20000);
    Employee directorRND = new Employee("严明","研发部",20000);
    //创建两个员工:销售部销售员
    Employee saler1 = new Employee("孟德贵","销售部",10000);
    Employee saler2 = new Employee("肖亮高","销售部",10000);
    //创建两个员工:研发部工程师
    Employee engineer1 = new Employee("左弓成","研发部",10000);
    Employee engineer2 = new Employee("成颜发","研发部",10000);
    //总裁添加下属
    president.add(directorSales);
    president.add(directorRND);
    //销售部部门领导添加下属
    directorSales.add(saler1);
    directorSales.add(saler2);
    //研发部部门领导添加下属
    directorRND.add(engineer1);
    directorRND.add(engineer2);
    //打印输出所有员工
    System.out.println(president);
    for(Employee directorEmployee: president.getSubordinates()) {
      System.out.println(directorEmployee);
      for(Employee employee: directorEmployee.getSubordinates()) {
        System.out.println(employee);
      }
    }
  }
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    20

    文章

    2990

    浏览量

    111353
  • JAVA语言
    +关注

    关注

    0

    文章

    138

    浏览量

    20766
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ADS52J90配置成了test pattern模式,ADC传输回来的pattern值出现错位现象,为什么?

    调试ADS52J90这款芯片时,先将芯片配置成了test pattern模式,但是ADC传输回来的pattern值出现错位现象,抓取frame clk时发现在设定某些特定的pattern
    发表于 01-03 07:21

    dlpc3470 Splash Pattern模式为什么会设置最大Pattern周期,这个最大周期能否更改?

    dlpc3470 Splash Pattern 模式为什么会设置最大 Pattern 周期,这个最大周期能否更改?
    发表于 02-19 08:41

    lightcrafter4500. Pattern sequence模式下,图像源(pattern source)中Video port怎么使用?

    你好,我们在做三维测量,需要通过该模块投影结构光。但是lightcrafter4500 的闪存大小只有32MB,不能将所需的结构光图像完全存入。因此,在使用Pattern sequence模式
    发表于 02-28 07:38

    请问external pattern sequence子模式的正确使用方式是什么?

    在做结构光成像的相关研究中,想投影大量正弦条纹图(比如60张)并配合相机实现外触发,根据查阅用户手册和编程手册,应该将lightcrafter设置为hdmi模式下的external pattern
    发表于 02-28 08:38

    DLP中video模式pattern模式有什么区别?

    你好,请问,在DLP相关文档中,有提到video模式pattern模式,请问这两种模式有什么区别?
    发表于 03-03 08:32

    10 Composite设备

    10 Composite设备
    发表于 10-11 09:12 ?4次下载
     10 <b class='flag-5'>Composite</b>设备

    Land Pattern File

    Land Pattern File
    发表于 02-02 08:12 ?0次下载
    Land <b class='flag-5'>Pattern</b> File

    Land Pattern File

    Land Pattern File
    发表于 02-02 08:43 ?9次下载
    Land <b class='flag-5'>Pattern</b> File

    Land Pattern and Solder Stencil

    Land Pattern and Solder Stencil
    发表于 02-19 11:47 ?7次下载
    Land <b class='flag-5'>Pattern</b> and Solder Stencil

    Land Pattern and Solder Stencil

    Land Pattern and Solder Stencil
    发表于 02-19 11:48 ?3次下载
    Land <b class='flag-5'>Pattern</b> and Solder Stencil

    Land Pattern and POD

    Land Pattern and POD
    发表于 03-05 15:59 ?0次下载
    Land <b class='flag-5'>Pattern</b> and POD

    嵌入式C语言软件设计之装饰器模式(Decorator Pattern

    装饰器模式(Decorator Pattern),是结构型设计模式的一种,装饰器模式允许向一个现有的对象添加新的功能,而又不改变其对象结构,这种方式比使用子类继承的方式更加灵活。
    发表于 03-01 10:55 ?611次阅读

    设计模式结构性:组合模式

    组合模式Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。
    的头像 发表于 06-08 10:34 ?1481次阅读
    设计<b class='flag-5'>模式</b>结构性:<b class='flag-5'>组合</b><b class='flag-5'>模式</b>

    演示装饰器模式用法

    装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
    的头像 发表于 06-08 11:16 ?788次阅读
    演示装饰器<b class='flag-5'>模式</b>的<b class='flag-5'>用法</b>

    组合模式应该怎么用

    uniformly. 组合模式Composite Pattern):将对象组合成树形结构以表示“部分-整体”的层次结构, 使得用户对单个
    的头像 发表于 10-09 10:37 ?719次阅读
    <b class='flag-5'>组合</b><b class='flag-5'>模式</b>应该怎么用