
الگوی طراحـــــــــی Builder
الگوی طراحی Builder یک الگوی ایجادی (Creational Pattern) است که برای ساخت شیء پیچیدهای که دارای تعداد زیادی ویژگی است، استفاده میشود. این الگو اجازه میدهد که روند ساختن یک شیء مشابه با تنظیمات مختلف را مدیریت کنیم و از جزئیات ساخت آن شیء پنهان شویم. با استفاده از الگوی Builder، کد ایجاد شیء از اطلاعات آن جدا میشود و میتوانیم چندین نوع شیء مختلف با استفاده از یک روش ساخت واحد ایجاد کنیم.
مفهوم الگوی Builder به این صورت است که ما یک کلاس Builder داریم که تعدادی متد برای تنظیم ویژگیهای شیء اصلی (Product) را ارائه میدهد. سپس یک کلاس Director نیز میتواند از Builder استفاده کند و مراحل ساخت شیء را مدیریت کند. در نهایت، شیء اصلی توسط Builder با استفاده از ویژگیهای تنظیم شده ساخته میشود.
حالا با یک مثال واقعی و بسیار کاربردی از الگوی Builder در زبان سی شارپ آشنا میشویم:
فرض کنید ما یک برنامه برای ساخت و نمایش رزومههای کاری داریم. هر رزومه دارای اطلاعات مختلفی مانند نام، تاریخ تولد، تحصیلات، سابقه کاری و مهارتها است. با استفاده از الگوی Builder، میتوانیم اطلاعات مختلف رزومهها را به صورت جداگانه مدیریت کنیم و چندین نوع رزومه با تنظیمات مختلف ایجاد کنیم.
1. Product (شیء اصلی رزومه):
1public class Resume
2{
3 public string Name { get; set; }
4 public string BirthDate { get; set; }
5 public string Education { get; set; }
6 public string WorkExperience { get; set; }
7 public string Skills { get; set; }
8
9 public void Display()
10 {
11 Console.WriteLine($"Name: {Name}");
12 Console.WriteLine($"Birth Date: {BirthDate}");
13 Console.WriteLine($"Education: {Education}");
14 Console.WriteLine($"Work Experience: {WorkExperience}");
15 Console.WriteLine($"Skills: {Skills}");
16 }
17}
18
19
2. Builder (سازنده رزومه):
1public interface IResumeBuilder
2{
3 void SetName(string name);
4 void SetBirthDate(string birthDate);
5 void SetEducation(string education);
6 void SetWorkExperience(string workExperience);
7 void SetSkills(string skills);
8 Resume Build();
9}
10
11public class SimpleResumeBuilder : IResumeBuilder
12{
13 private Resume _resume = new Resume();
14
15 public void SetName(string name)
16 {
17 _resume.Name = name;
18 }
19
20 public void SetBirthDate(string birthDate)
21 {
22 _resume.BirthDate = birthDate;
23 }
24
25 public void SetEducation(string education)
26 {
27 _resume.Education = education;
28 }
29
30 public void SetWorkExperience(string workExperience)
31 {
32 _resume.WorkExperience = workExperience;
33 }
34
35 public void SetSkills(string skills)
36 {
37 _resume.Skills = skills;
38 }
39
40 public Resume Build()
41 {
42 return _resume;
43 }
44}
45
3. Director:
1public class ResumeDirector
2{
3 private IResumeBuilder _builder;
4
5 public ResumeDirector(IResumeBuilder builder)
6 {
7 _builder = builder;
8 }
9
10 public void ConstructSimpleResume()
11 {
12 _builder.SetName("John Doe");
13 _builder.SetBirthDate("1990-01-01");
14 _builder.SetEducation("Bachelor's Degree in Computer Science");
15 _builder.SetWorkExperience("Software Engineer at XYZ Company");
16 _builder.SetSkills("C#, .NET, SQL, OOP");
17 }
18}
19
4. Client (کلاینت):
1public class Program
2{
3 public static void Main()
4 {
5 IResumeBuilder builder = new SimpleResumeBuilder();
6 ResumeDirector director = new ResumeDirector(builder);
7
8 director.ConstructSimpleResume();
9 Resume resume = builder.Build();
10 resume.Display();
11 }
12}
13
خروجی برنامه به صورت زیر خواهد بود:
Name: John Doe
Birth Date: 1990-01-01
Education: Bachelor's Degree in Computer Science
Work Experience: Software Engineer at XYZ Company
Skills: C#, .NET, SQL, OOP
در این مثال، با استفاده از الگوی Builder، ما یک برنامه ساخت رزومههای کاری ایجاد کردیم. با استفاده از کلاسهای SimpleResumeBuilder و ResumeDirector، ما اطلاعات مختلف رزومهها را به صورت جداگانه مدیریت میکنیم و با استفاده از کلاس Client، یک رزومه ساده با تنظیمات مختلف ایجاد میکنیم. این الگو امکان ایجاد نوعهای مختلف رزومه با تنظیمات ویژگیهای مختلف را به ما میدهد.
در این مثال، ما یک برنامه برای ساخت و نمایش رزومههای کاری داشتیم و از الگوی Builder برای ایجاد رزومهها با تنظیمات مختلف استفاده کردیم.