STRUCTURAL DESIGN PATTERNS
یکی از زیرشاخه های الگوهای طراحی، Structural Design Patterns است. این الگوها در مورد چگونگی ترکیب اشیاء و کلاس ها بایکدیگر صحبت میکند.
Composite Design Pattern
دیزاین پترن Composite یکی از زیرشاخه های الگوهای طراحی از نوع Structural است.
از دیزاین پترن Composite جهت ساخت اشیاء بصورت درخت سلسله مراتبی زمانی که قرار است با گروهی از اشیاء رفتار مشابهی انجام داد استفاده میشود.
میزان استفاده : متوسط رو به بالا
همچنین در کدهایی مثل لیست پیوندی و گراف میتوانیم از دیزاین پترن کامپوزیت استفاده کنیم.
پیاده سازی دیزاین پترن Composite
فرض کنید کلاسی با نام Employee به عنوان کلاس کارمند به صورت زیر داریم.
internal class Employee { #region Variables public int PersonalId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public List EmployeeSubSetList { get; set; } #endregion #region Constructors public Employee() { PersonalId = 0; FirstName = ""; LastName = ""; EmployeeSubSetList = new List(); } #endregion #region Methods public void AddSubEmployee(Employee employee) { if (EmployeeSubSetList == null) EmployeeSubSetList = new List(); EmployeeSubSetList.Add(employee); } public void RemoveSubEmployee(Employee employee) { if (EmployeeSubSetList == null) EmployeeSubSetList = new List(); if (EmployeeSubSetList.Any(x => x == employee)) EmployeeSubSetList.Remove(employee); } #endregion #region Helper Methods public override string ToString() { string result = ""; result += $"{FirstName}.{LastName} ({PersonalId})"; foreach (var employee in EmployeeSubSetList) result += "\n\t" + employee.ToString(); return result; } #endregion }
در این کلاس یک property لیستی از همین کلاس Employee داریم.
public List EmployeeSubSetList { get; set; }
همچنین دو متد جهت اضافه نمودن کارمند زیردست و حذف کارمند زیردست از این لیست نوشته شده است.
public void AddSubEmployee(Employee employee) { if (EmployeeSubSetList == null) EmployeeSubSetList = new List(); EmployeeSubSetList.Add(employee); } public void RemoveSubEmployee(Employee employee) { if (EmployeeSubSetList == null) EmployeeSubSetList = new List(); if (EmployeeSubSetList.Any(x => x == employee)) EmployeeSubSetList.Remove(employee); }
حال نوبت به نوشتن متد main میرسد.
static void Main(string[] args) { try { var CEO = new Employee() { PersonalId = 1, FirstName = "Mr", LastName = "CEO" }; var CTO = new Employee() { PersonalId = 10, FirstName = "Mr", LastName = "CTO" }; var clerk = new Employee() { PersonalId = 100, FirstName = "Mr", LastName = "Clerk" }; CTO.AddSubEmployee(clerk); CEO.AddSubEmployee(CTO); ShowMessage(CEO.ToString()); ShowMessage("============================================"); ShowMessage(CTO.ToString()); ShowMessage("============================================"); ShowMessage(clerk.ToString()); } catch (Exception ex) { ShowError(ex.Message); } Console.ReadLine(); }
در متد main برنامه، یک مدیرعامل با عنوان CEO تعریف کرده ایم. یک مدیر فنی با عنوان CTO تعریف کرده ایم و یک کارمند تحت عنوان Clerk تعریف کرده ایم.
اگر بخواهیم ترتیب این اعضا را مشخص کنیم، به این صورت است که کارمند زیرمجموعه مدیرفنی و مدیرفنی زیرمجموعه مدیرعامل است.
جهت نشان دادن این سلسله مراتب باید به ترتیب کارمند را زیرمجموعه مدیرفنی کنیم و سپس مدیرفنی را زیرمجموعه مدیرعامل.
CTO.AddSubEmployee(clerk); CEO.AddSubEmployee(CTO);
خروجی کد main بصورت زیر است.
Mr.CEO (1) Mr.CTO (10) Mr.Clerk (100) ============================================ Mr.CTO (10) Mr.Clerk (100) ============================================ Mr.Clerk (100)
ترتیب پیشنهادی برای یادگیری طراحی سایت
دیزاین پترن COMPOSITE
دوره در حال تکمیل است …
نظرات