Tasarım Desenleri - Kompozit Desen

Bileşik desen, bir grup nesneyi benzer şekilde tek bir nesne olarak ele almamız gerektiğinde kullanılır. Bileşik desen, tüm hiyerarşinin yanı sıra parçayı da temsil etmek için bir ağaç yapısı bağlamında nesneleri oluşturur. Bu desen türü, bu desen bir nesne grubu ağaç yapısı oluşturduğundan yapısal modelin altına girer.

Bu desen, kendi nesnelerinin grubunu içeren bir sınıf oluşturur. Bu sınıf, aynı nesnelerden oluşan grubunu değiştirmenin yollarını sağlar.

Bir kuruluşun çalışan hiyerarşisini göstereceğimiz aşağıdaki örnekle bileşik model kullanımını gösteriyoruz.

Uygulama

Kompozit model oyuncu sınıfı olarak hareket eden bir sınıf çalışanımız var. CompositePatternDemo , demo sınıfımız, departman düzeyinde hiyerarşi eklemek ve tüm çalışanları yazdırmak için Employee sınıfını kullanacaktır .

Aşama 1

Employee nesnelerinin listesine sahip olan Employee sınıfı oluşturun .

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

Adım 2

Çalışan hiyerarşisini oluşturmak ve yazdırmak için Employee sınıfını kullanın .

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

Aşama 3

Çıkışı doğrulayın.

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 ]