بخش های اصلی

آموزش الگوهای طراحی

Design Pattern - الگوی Composite

الگوی Compsite زمانی که می خوایم با گروهی از اشیاء به روشی یکسان بعنوان یک شیء منفرد برخورد کنیم، استفاده میشه. الگوی Composite، گروهی اشیاء را بصورت یک ساختار درختی برای نمایش آن ها بصورت سلسله مراتبی، دربرمی گیره. از آن جایی که این الگوی طراحی یک ساختار درختی از گروهی از اشیاء ایجاد می کنه، زیرگروه الگوی ساختاری (structural) محسوب میشه.

این الگو کلاسی شامل گروهی از اشیاءِ خودش ایجاد می کنه. این کلاس راه هایی برای تغییر گروهش که شامل اشیاءِ یکسانیِه فراهم می کنه.

استفاده از الگوی composite را از طریق مثال زیر به شما یاد میدیم که در آن سلسله مراتبِ استخدام شدگانِ یک سازمان نشان داده شده.

پیاده سازی

یک کلاس به نام Employee داریم که بعنوان کلاسِ عمل کننده ی الگویِ composite، عمل می کنه. CompositePatternDemo، در نسخه ی آزمایشیِ کلاس مان، از کلاس Employee برای اضافه کردن سلسله مراتبِ سطوحِ دپارتمان و چاپ (برگرداندن) همه ی employeeها استفاده می کنیم.

composite pattern uml diagram

مرحله ی 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 برای ایجاد و چاپِ سلسله مراتبِ 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 ]

مبحث آموزشی

آموزش الگوهای طراحی

Learn Design Patterns

سرفصل ها

پرســیدن سؤال جدید

سؤال های تخصصی خود را از ما بپرسید

تبلیغات

دنبال کردن تلگرام کانال سافت اسکیل

https://telegram.me/softskill_ir

عملیات کاربران

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد