در این جلسه تیم کدگیت را با آموزش Composite پترن در جاوا همراهی کنید. پیش نیاز این جلسه شامل موارد زیر است:
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 از کارمندان زیر دست (کارمندان دیگری که از کارمند ما دستور میگیرند) است را نگهداری میکند. این کلاس شامل متدهای زیر است:
- Employee: این متد همان Constructor ما است.
- Add: این متد کارمندی را به عنوان کارمند زیر دست به Arraylist اضافه میکند.
- Remove: این متد کارمند زیر دستی را از لیست ما حذف میکند.
- getSubordinates: این متد لیست کارمندان زیر دست را برمیگرداند.
- 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);
}
}
}
همانطور که در کد بالا میبینید ما کارمندانی با ساختار شکل زیر ساختیم و در آخر اطلاعات کارمندان چاپ کردیم.
