XXXI: Builder Design Pattern trong C# - Cách triển khai và ví dụ

Ngày đăng: 2023-05-04 11:59:01

Mục lục

Builder Design Pattern trong C# là gì?

Builder Design Pattern xây dựng một đối tượng phức tạp bằng cách sử dụng nhiều đối tượng đơn giản và sử dụng phương pháp tiếp cận từng bước.

Nếu quá trình xây dựng của chúng ta quá phức tạp, thì hãy sử dụng Builder Design Pattern.

Để hiểu rõ hơn, các bạn hãy cùng mình xem qua ví dụ dưới đây.

Ví dụ 1:

Giả sử chúng ta có một chiếc Laptop, đây là một vật thể phức tạp. Để xây dựng một chiếc laptop, ta cần sử dụng nhiều vật thể nhỏ như: màn hình, ổ cứng, pin, ... .

Vì vậy, nếu sử dụng quá trình trên thì ta có thể tạo ra nhiều chiếc laptop khác nhau với các thiết bị khác nhau. Nhưng vẫn tuân thủ theo cấu trúc của một chiếc máy tính. Chẳng hạn như chiếc laptop này thì có Ram 4gb, chiếc kia có Ram 8gb.

Ví dụ 2:

Giả sử mình cần thiết kế một bài báo cáo tốt nghiệp với hai dạng Word và Power Point. Cả hai bài này đều có cấu trúc từng phần như nhau: Lý do chọn đề tài, phương pháp nghiên cứu, chức năng, ... .

Như vậy ta tách ra làm từng phần nhỏ, sau đó trình bày ở hai dạng báo cáo khác nhau là Word và Power Point mà nội dung vẫn như nhau.

Sơ đồ Builder Design Pattern trong C#

Để tách quá trình xây dựng, Builder Design Pattern xây dựng bao gồm 4 thành phần như sau:

Giải thích sơ đồ:

  1. Builder: Là một giao diện xác định tất cả các bước được sử dụng để tạo ra một sản phẩm.
  2. Concrete: Class ConcreteBuilder triển khai giao diện Builder. Chịu trách nhiệm xây dựng và lắp ráp các bộ phận riêng lẻ của sản phẩm.
  3. Director: Class Director lấy các quy trình riêng lẻ đó từ Builder và xác định trình từ để xây dựng sản phẩm.
  4. Product: Class này xác định các bộ phận khác nhau sẽ tạo ra sản phẩm.

Cách triển khai Builder Design Pattern trong C# và ví dụ

Trong phần này mình sẽ triển khai Builder Design Pattern trong C# thông qua một ví dụ, cụ thể như sau.

Chúng ta sẽ tạo ra một bản báo cáo với 3 phần nội dung: ReportHeader, ContentReport và ReportFooter. Bản báo cáo sẽ được trình bày dưới hai dạng là Excel và PDF.

Người dùng nhập vào tên dạng báo cáo là gì, thì chương trình sẽ hiển thị ra nội dung của từng phần có trong báo cáo đó. Bây giờ hãy cùng mình thực hiện thôi nào !!!

Bước 1: Tạo class Report bao gồm ReportType, ReportHeader, ContentReport và ReportFooter.

Report.cs

using System;

using System.Collections.Generic;

using System.Text;

 

namespace BuilderDesignPattern

{

    public class Report

    {

        public string ReportType { get; set; }

        public string ReportHeader { get; set; }

        public string ReportFooter { get; set; }

        public string ReportContent { get; set; }

        public void DisplayReport()

        {

            Console.WriteLine("Report Type :" + ReportType);

            Console.WriteLine("Header :" + ReportHeader);

            Console.WriteLine("Content :" + ReportContent);

            Console.WriteLine("Footer :" + ReportFooter);

        }

    }

}

Bước 2: Tạo class ReportBuilder

ReportBuilder.cs

using System;

using System.Collections.Generic;

using System.Text;

 

namespace BuilderDesignPattern

{

    public abstract class ReportBuilder

    {

        protected Report reportObject;

        public abstract void SetReportType();

        public abstract void SetReportHeader();

        public abstract void SetReportContent();

        public abstract void SetReportFooter();

        public void CreateNewReport()

        {

            reportObject = new Report();

        }

        public Report GetReport()

        {

            return reportObject;

        }

    }

}

Bước 3: Bởi vì chúng ta đang xử lý hai dạng báo cáo là Excel và PDF vậy nên cần tạo hai class ExcelReport và PDFReport.

ExcelReport.cs

using System;

using System.Collections.Generic;

using System.Text;

 

namespace BuilderDesignPattern

{

    class ExcelReport : ReportBuilder

    {

        public override void SetReportContent()

        {

            reportObject.ReportContent = "Excel Content Section";

        }

        public override void SetReportFooter()

        {

            reportObject.ReportFooter = "Excel Footer";

        }

        public override void SetReportHeader()

        {

            reportObject.ReportHeader = "Excel Header";

        }

        public override void SetReportType()

        {

            reportObject.ReportType = "Excel";

        }

    }

}

PDFReport.cs

using System;

using System.Collections.Generic;

using System.Text;

 

namespace BuilderDesignPattern

{

    public class PDFReport : ReportBuilder

    {

        public override void SetReportContent()

        {

            reportObject.ReportContent = "PDF Content Section";

        }

        public override void SetReportFooter()

        {

            reportObject.ReportFooter = "PDF Footer";

        }

        public override void SetReportHeader()

        {

            reportObject.ReportHeader = "PDF Header";

        }

        public override void SetReportType()

        {

            reportObject.ReportType = "PDF";

        }

    }

}

Bước 4: Tạo class ReportDirector có một phương thức chung là MakeReport() có tham số đầu vào là ReportBuilder. Sau đó tạo và trả về một báo cáo cụ thể.

ReportDirector.cs

using System;

using System.Collections.Generic;

using System.Text;

 

namespace BuilderDesignPattern

{

    public class ReportDirector

    {

        public Report MakeReport(ReportBuilder reportBuilder)

        {

            reportBuilder.CreateNewReport();

            reportBuilder.SetReportType();

            reportBuilder.SetReportHeader();

            reportBuilder.SetReportContent();

            reportBuilder.SetReportFooter();

            return reportBuilder.GetReport();

        }

    }

}

Bước 5: Tạo class Client để chạy chương trình và kiểm tra kết quả.

Main

using System;

 

namespace BuilderDesignPattern

{

    class Program

    {

        static void Main(string[] args)

        {

            Report report;

            ReportDirector reportDirector = new ReportDirector();

            PDFReport pdfReport = new PDFReport();

            report = reportDirector.MakeReport(pdfReport);

            report.DisplayReport();

            Console.WriteLine("-------------------");

            ExcelReport excelReport = new ExcelReport();

            report = reportDirector.MakeReport(excelReport);

            report.DisplayReport();

 

            Console.WriteLine("\n----------------------------------\n");

            Console.Write("Chuong trinh nay duoc dang tai thuanhoaonline.com");

            Console.ReadKey();

             

        }

    }

}

Kết quả:

 

Về bài trước...

                                  Bài tiếp theo...


Tài liệu lập trình C#

Bài viết trong cùng chuyên mục

Góc games giải trí



Cờ caro


Butterfly


Lật hình (luyện trí nhớ)

Cờ tướng ONLINE

Xếp hình

Ghép hình

15_PUZZLE

Kill ghosts

Banchim

Planet Defense

Tower game

Tower game

Plapy Bird (NH.Đông)

Vượt chướng ngại vật



0379136392

Thông tin liên hệ: Lê Văn Thuyên - ĐT: 0379136392 ; Gmail: lethuyen0379136392@gmail.com

Comment

 +   Lê Văn Thuyên-0379136392:Cảm ơn quý vị và các bạn đã vào Website của Lê Thuyên! Lê thuyên rất mong nhận được sự góp ý của quý vị và các bạn cho sự phát triển của website này. Xin chân thành cảm ơn!

Trả lời

 *   Dũng Trung-090567448:Lê Văn Thuyên0379136392--->Ok.Anh!

Trả lời

 *   Bé Nguyễn-benguyen@gmail,com:Lê Văn Thuyên0379136392--->Good job!

Trả lời

 +   -:

Trả lời

 +   -:

Trả lời

12664