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

Ngày đăng: 2023-05-05 12:08:23

Mục lục

1.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ẻ.

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.

2.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ị.

IComponent.cs

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 nameprice để 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().

Leaf.cs

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().

Composite.cs

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().

Program.cs

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 thuanhoaonline.com");

            Console.Read();

             

        }

    }

}

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

12593