디자인 패턴-복합 패턴

복합 패턴은 개체 그룹을 단일 개체와 유사한 방식으로 처리해야하는 경우에 사용됩니다. 복합 패턴은 트리 구조의 관점에서 개체를 구성하여 전체 계층뿐만 아니라 부분을 나타냅니다. 이러한 유형의 디자인 패턴은이 패턴이 객체 그룹의 트리 구조를 생성하기 때문에 구조적 패턴 아래에 있습니다.

이 패턴은 자체 개체 그룹을 포함하는 클래스를 만듭니다. 이 클래스는 동일한 개체 그룹을 수정하는 방법을 제공합니다.

우리는 조직의 직원 계층 구조를 보여줄 다음 예제를 통해 복합 패턴의 사용을 시연하고 있습니다.

이행

우리는 클래스가 직원 복합 패턴 배우 클래스 역할을합니다. CompositePatternDemo , 데모 클래스는 Employee 클래스를 사용 하여 부서 수준 계층 구조를 추가하고 모든 직원을 인쇄합니다.

1 단계

Employee 개체 목록이있는 Employee 클래스를 만듭니다 .

Employee.java

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

public class Employee {
   private String name;
   private String dept;
   private int salary;
   private List<Employee> subordinates;

   // constructor
   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+" ]");
   }   
}

2 단계

Employee 클래스를 사용하여 직원 계층 구조를 만들고 인쇄합니다.

CompositePatternDemo.java

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);

      //print all employees of the organization
      System.out.println(CEO); 
      
      for (Employee headEmployee : CEO.getSubordinates()) {
         System.out.println(headEmployee);
         
         for (Employee employee : headEmployee.getSubordinates()) {
            System.out.println(employee);
         }
      }		
   }
}

3 단계

출력을 확인하십시오.

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 ]