Composite 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 đến các bạn Composite Design Pattern trong C# – Cách triển khai và ví dụ. Đây là một pattern thuộc nhóm Structural Design Pattern trong C#.

Chúng ta sẽ cùng nhau tìm hiểu về Composite Design Pattern là gì? Cách triển khai nó trong C# và ví dụ cụ thể về nó.

Composite Design Pattern trong C# là gì?

Composite Design Pattern có chức năng sắp xếp các đối tượng thành cấu trúc cây để thể hiện một cấu trúc phân cấp. Nó cho phép chúng ta xử lý các đối tượng riêng lẻ và bố cục của các đối tượng một cách đồng nhất.

Mỗi nút trong cấu trúc cây thực hiện một nhiệm vụ. Composite Design Pattern được sử dụng khi chúng ta cần xử lý một nhóm đối tượng như việc xử lý một đối tương riêng lẻ.

Bài viết này được đăng tại [kiso.vn]

composite 01 png

Ví dụ: Chúng ta có một chiếc máy tính, trong máy tính có rất nhiều các thiết bị nhỏ khác. Đó là các đối tượng riêng lẻ và máy tính chính là đối tượng tổng hợp. Khi muốn hoàn thành một chiếc máy tính ta cần lắp ráp từng thiết bị nhỏ theo một cấu trúc nhất định có sẵn.

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

Trong phần này mình sẽ thực hiển triển khai Composite Design Pattern trong C# thông qua một ví dụ cụ thể. Giả sử chúng ta cần lắp ráp một chiếc máy tính, khi đó cần tách nhỏ các thiết bị và xem định giá của nó.

Mình sẽ thực hiện chương trình theo từng bước như sau:

Bước 1: Tạo interface IComponent.

Ở đây chúng ta sẽ định nghĩa các chức năng chung của chương trình, ví dụ mình định nghĩa giá của các thiết bị.

using System;
using System.Collections.Generic;
using System.Text;

namespace Composite_Design_Pattern
{
    public interface IComponent
    {
        void DisplayPrice();
    }
}

Bước 2: Tạo class Leaf.

Class này triển khai interface IComponent, do đó chúng ta cần cung cấp triển khai cho phương thức DisplayPrice(). Tạo hai thuộc tính name, price để hiển thị tên thiết bị và giá của nó.

Cuối cùng sẽ hiển thị hai thuộc tính này bằng cách sử dụng phương thức DisplayPrice().

using System;
using System.Collections.Generic;
using System.Text;

namespace Composite_Design_Pattern
{
    public class Leaf : IComponent
    {
        public int Price { get; set; }
        public string Name { get; set; }
        public Leaf(string name, int price)
        {
            this.Price = price;
            this.Name = name;
        }

        public void DisplayPrice()
        {
            Console.WriteLine(Name + " : " + Price);
        }
    }
}

Bước 3: Tạo class Composite.

Trong class sử dụng phương thức AddComponent() để thêm các thành phần con, vì đây là class tổng hợp các thành phần. Class này thực hiện interface IComponent và là một phần của phương thức DisplayPrice().

using System;
using System.Collections.Generic;
using System.Text;

namespace Composite_Design_Pattern
{
    public class Composite : IComponent
    {
        public string Name { get; set; }
        List<IComponent> components = new List<IComponent>();
        public Composite(string name)
        {
            this.Name = name;
        }
        public void AddComponent(IComponent component)
        {
            components.Add(component);
        }

        public void DisplayPrice()
        {
            Console.WriteLine(Name);
            foreach (var item in components)
            {
                item.DisplayPrice();
            }
        }
    }
}

Bước 4: Tạo class Program.

Trong class này chúng ta cần tạo cấu trúc cây, sau đó hiển thị giá thành phần tương ứng bằng cách gọi phương thức DisplayPrice().

using System;

namespace Composite_Design_Pattern
{
    class Program
    {
        static void Main(string[] args)
        {
            //tạo đối tượng leaf
            IComponent hardDisk = new Leaf("Hard Disk", 2000);
            IComponent ram = new Leaf("RAM", 3000);
            IComponent cpu = new Leaf("CPU", 2000);
            IComponent mouse = new Leaf("Mouse", 2000);
            IComponent keyboard = new Leaf("Keyboard", 2000);
            //tạo đối tượng composite
            Composite motherBoard = new Composite("Peripherals");
            Composite cabinet = new Composite("Cabinet");
            Composite peripherals = new Composite("Peripherals");
            Composite computer = new Composite("Computer");
            //tạo cấu trúc cây
            motherBoard.AddComponent(cpu);
            motherBoard.AddComponent(ram);

            cabinet.AddComponent(motherBoard);
            cabinet.AddComponent(hardDisk);

            peripherals.AddComponent(mouse);
            peripherals.AddComponent(keyboard);

            computer.AddComponent(cabinet);
            computer.AddComponent(peripherals);

            computer.DisplayPrice();
            Console.WriteLine();

            keyboard.DisplayPrice();
            Console.WriteLine();
   
            cabinet.DisplayPrice();

            Console.WriteLine("n----------------------------------------");
            Console.WriteLine("Chuong trinh nay duoc dang tai Kiso.vn");
            Console.Read();
            
        }
    }
}

Kết quả:

composite 02 png

Như vậy là chúng ta đã cùng nhau tìm hiểu về Composite Design Pattern trong C# – Cách triển khai và ví dụ cụ thể về nó. Ở bài tiếp theo mình sẽ giới thiệu đến các bạn Proxy Design Pattern trong C#.

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *