دیزاین پترن Composite

دیزاین پترن Composite

دیزاین پترن Composite

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-design-pattern

پرینت صفحه دانلود این آموزش

هولوسن

با من یاد بگیر

آموزش های بیشتر در وبسایت هولوسن : https://holosen.net

بدون نظر

**پرسش و پاسخ** سوال خود مطرح کنید.
امتیاز شما*