CĂN BẢN
NÂNG CAO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

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

Trong bài viết này mình sẽ giới thiệu cho các bạn về Builder Design Pattern trong C# - cách triển khai và ví dụ. Đây là một loại pattern thuộc nhóm Creational Design Pattern.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Chúng ta sẽ tìm hiểu Builder Design Pattern là gì? Cách triển khai nó như thế nào trong C# và một vài ví dụ thực tế về nó.

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.

Bài viết này được đăng tại [free tuts .net]

Để 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.

builder 02 png

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:

factory 03 png

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 Freetuts.net");
            Console.ReadKey();
            
        }
    }
}

Kết quả:

builder 01 png

Như vậy là chúng ta đã tìm hiểu xong về Builder Design Pattern trong C# - Cách triển khai và ví dụ của nó. Ở bài tiếp theo mình tiếp tục giới thiệu các bạn về Prototype Design Pattern trong C#.

Cùng chuyên mục:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Tự viết ứng dụng quản lý xe ra vào C# Winforms và Firebase

Tự viết ứng dụng quản lý xe ra vào C# Winforms và Firebase

Trong bài viết này Freetuts chia sẽ cho các bạn một ứng dụng khá thú…

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

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

Chúng ta sẽ tìm hiểu về Factory Design Pattern trong C# là gì? Cách triển…

Hướng dẫn giải phương trình bậc hai trong C#

Hướng dẫn giải phương trình bậc hai trong C#

Giải phương trình bậc nhất ax + b = 0 trong C#

Giải phương trình bậc nhất ax + b = 0 trong C#

Cách nối hai mảng trong C# bằng hai cách khác nhau

Cách nối hai mảng trong C# bằng hai cách khác nhau

Top