design pattern, java, جاوا, دیزاین پترن

Composite پترن در جاوا (Design Pattern)

Composite پترن در جاوا

در این جلسه تیم کدگیت را با آموزش Composite پترن در جاوا همراهی کنید. پیش نیاز این جلسه شامل موارد زیر است:

  1. آشنایی با شی گرایی
  2. متد در جاوا
  3. Constructor در جاوا
  4. لیست آرایه ای در جاوا
  5. حلقه for در جاوا

Structural Patterns

یکی از زیر شاخه‌های دیزاین پترن Structural Patterns است. Structural Patterns در مورد اشیا و کلاس‌ها و چگونگی ترکیب آنها با یکدیگر صحبت می‌کند. برای مشخص کردن ارتباط اشیا و کلاس‌ها با یکدیگر، این پترن ساختار ساده‌ای را ایجاد می‌کند (البته بیشتر تمرکز این پترن بر روی شی گرایی است).

Composite پترن در جاوا

الگوی Composite زمانی استفاده می‌شود که بخواهیم با گروهی از اشیا رفتاری مشابه به عنوان یک شی واحد انجام دهیم. Composite پترن مجموعه‌ای از اشیا است که ساختاری مشابه درخت دارند و سلسه مراتب در آن رعایت می‌شود. ما در کدهایی همانند لیست پیوندی و گراف میتوانیم از دیزاین پترن استفاده کنیم.

مثال Composite پترن در جاوا

هر شرکت شامل کارمندانی است و هر کارمند در ساختمانی  که شامل قسمت‌های مختلفی مانند سخت افزار، نرم‌افزار و …. می‌شود، کار می‌کند.  ما می‌خواهیم برنامه ای بنویسیم که اطلاعات مدیر هر بخش و کارمندان را ذخیره کند. برای این کار کلاسی می‌سازیم به نام Employee  که اطلاعات کارمند و مدیر را ذخیره می‌کند و هر Employee یک Arraylist دارد که زیر دستان آن کارمند را مشخص می‌کند. کد کلاس Employee به صورت زیر می‌باشد:

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

همانطور که در کد کلاس Employee میبینید، این کلاس سه فیلد حقوق، ساختمان و نام کارمند را ذخیره می‌کند  همچنین یک Arraylist از کارمندان زیر دست (کارمندان دیگری که از کارمند ما دستور می‌گیرند) است را نگهداری می‌کند. این کلاس شامل متد‌های زیر است:

  1. Employee: این متد همان Constructor ما است.
  2. Add: این متد کارمندی را به عنوان کارمند زیر دست به Arraylist اضافه می‌کند.
  3. Remove: این متد کارمند زیر دستی را از لیست ما حذف می‌کند.
  4. getSubordinates: این متد لیست کارمندان زیر دست را بر‌می‌گرداند.
  5. ToString: این متد اطلاعات کارمند ما را چاپ می‌کند.

تست Composite پترن در جاوا

برای تست کد‌های بالا، کد Main زیر را بزنید:

     public static void main(String[] args) {

          Employee CEO = new Employee("Saeed Gharibi", "CEO", 30000);

          Employee headSales = new Employee("CodeGate 1", "Developer", 20000);

          Employee headMarketing = new Employee("CodeGate 2", "Marketing", 20000);

          Employee clerk1 = new Employee("CodeGate 3", "Marketing", 10000);
          Employee clerk2 = new Employee("CodeGate 4", "Marketing", 10000);

          Employee salesExecutive1 = new Employee("CodeGate 5", "Sales", 10000);
          Employee salesExecutive2 = new Employee("CodeGate 6", "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);
              }
          }
     }

همانطور که در کد بالا می‌بینید ما کارمندانی با ساختار شکل زیر ساختیم و در آخر اطلاعات کارمندان چاپ کردیم.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *