博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之组合模式——Java语言描述
阅读量:5173 次
发布时间:2019-06-13

本文共 2501 字,大约阅读时间需要 8 分钟。

组合模式又叫做部分整体模式,适用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次

介绍

意图

将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性

优点

  1. 高层模块调用简单
  2. 节点自由增加

缺点

在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口类,违反了依赖导致的原则

实现

创建一个Employee类,使用该类作为组合模型。

创建Employee类,该类带有Employee对象的列表

import java.util.ArrayList;import java.util.List; public class Employee {   private String name;   private String dept;   private int salary;   private List
subordinates; //构造函数 public Employee(String name,String dept, int sal) { this.name = name; this.dept = dept; this.salary = sal; subordinates = new ArrayList
(); } public void add(Employee e) { subordinates.add(e); } public void remove(Employee e) { subordinates.remove(e); } public List
getSubordinates(){ return subordinates; } public String toString(){ return ("Employee :[ Name : "+ name +", dept : "+ dept + ", salary :" + salary+" ]"); } }

使用 Employee 类来创建和打印员工的层次结构

public class CompositePatternDemo {   public static void main(String[] args) {      Employee CEO = new Employee("John","CEO", 30000);       Employee headSales = new Employee("Robert","Head Sales", 20000);       Employee headMarketing = new Employee("Michel","Head Marketing", 20000);       Employee clerk1 = new Employee("Laura","Marketing", 10000);      Employee clerk2 = new Employee("Bob","Marketing", 10000);       Employee salesExecutive1 = new Employee("Richard","Sales", 10000);      Employee salesExecutive2 = new Employee("Rob","Sales", 10000);       CEO.add(headSales);      CEO.add(headMarketing);       headSales.add(salesExecutive1);      headSales.add(salesExecutive2);       headMarketing.add(clerk1);      headMarketing.add(clerk2);       //打印该组织的所有员工      System.out.println(CEO);       for (Employee headEmployee : CEO.getSubordinates()) {         System.out.println(headEmployee);         for (Employee employee : headEmployee.getSubordinates()) {            System.out.println(employee);         }      }           }}

输出结果

Employee :[ Name : John, dept : CEO, salary :30000 ]Employee :[ Name : Robert, dept : Head Sales, salary :20000 ]Employee :[ Name : Richard, dept : Sales, salary :10000 ]Employee :[ Name : Rob, dept : Sales, salary :10000 ]Employee :[ Name : Michel, dept : Head Marketing, salary :20000 ]Employee :[ Name : Laura, dept : Marketing, salary :10000 ]Employee :[ Name : Bob, dept : Marketing, salary :10000 ]

转载于:https://www.cnblogs.com/AmosH/p/10254200.html

你可能感兴趣的文章
NOI2018垫底记
查看>>
注意java的对象引用
查看>>
C++ 面向对象 类成员函数this指针
查看>>
NSPredicate的使用,超级强大
查看>>
自动分割mp3等音频视频文件的脚本
查看>>
判断字符串是否为空的注意事项
查看>>
布兰诗歌
查看>>
(转)Tomcat 8 安装和配置、优化
查看>>
(转)Linxu磁盘体系知识介绍及磁盘介绍
查看>>
跨域问题整理
查看>>
[Linux]文件浏览
查看>>
获取国内随机IP的函数
查看>>
Spring Mvc模式下Jquery Ajax 与后台交互操作
查看>>
(转)matlab练习程序(HOG方向梯度直方图)
查看>>
tableView
查看>>
Happy Great BG-卡精度
查看>>
TCP/IP 邮件的原理
查看>>
原型设计工具
查看>>
windows下的C++ socket服务器(4)
查看>>
css3 2d转换3d转换以及动画的知识点汇总
查看>>