当前位置: 移动技术网 > IT编程>软件设计>设计模式 > 设计模式之组合模式——Java语言描述

设计模式之组合模式——Java语言描述

2019年01月12日  | 移动技术网IT编程  | 我要评论

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

介绍

意图

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

优点

  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<employee> subordinates;
 
   //构造函数
   public employee(string name,string dept, int sal) {
      this.name = name;
      this.dept = dept;
      this.salary = sal;
      subordinates = new arraylist<employee>();
   }
 
   public void add(employee e) {
      subordinates.add(e);
   }
 
   public void remove(employee e) {
      subordinates.remove(e);
   }
 
   public list<employee> 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 ]

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网