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

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

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ẽ cùng nhau tìm hiểu về Decorator Design Pattern là gì? Cách triển khai nó trong C# và một vài ví dụ cụ thể về nó.

Decorator Design Pattern trong C# là gì?

Decorator Design Pattern trong C# cho phép chúng ta thêm động các chức năng mới vào một đối tượng hiện có. Điều này không làm thay đổi hay sửa đổi cấu trúc của nó.

Pattern này hoạt động như một lớp bao bọc cho lớp hiện có. Nó tự động thay đổi chức năng của đối tượng trong thời gian chạy mà không ảnh hướng đến chức năng hiện có của đối tượng.

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

decorator 01 png

Ví dụ: Giả sử mình có một chiếc xe ô tô không có động cơ. Bây giờ mình muốn thêm một động cơ xăng hoặc động cơ Diesel vào chiếc ô tô này. Vậy khi thêm vào thì những thành phần trước đó và chức năng của nó không bị thay đổi. Chỉ có thêm động cơ mà thôi.

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

Trong phần này mình sẽ thực hiện triển khai Decorator Design Pattern bằng ví dụ chiếc ô tô ở trên. Quá trình triễn khai được thực hiện theo từng bước sau đây.

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

Interface này có một abstract method, phương thức này được thực hiện các subclasses cụ thể.

ICar.cs
using System;
using System.Collections.Generic;
using System.Text;

namespace DecoratorDesignPattern
{
    public interface ICar
    {
        ICar ManufactureCar();
    }
}

Bước 2: Tạo Concrete Car.

Tạo một class BMWCar có có chức năng triển khai interface ICar, trong đó có một phương thức ManufactureCar(). Phương thức này chịu trách nhiệm sản xuất CarBody, CarDoor, CarWheels, CarGlass.

Vì vậy khi chúng ta gọi phương thức này, kết quả trả về không có động cơ nào cả, chỉ có các phần cứng bên ngoài này mà thôi.

BMWCar.cs
using System;
using System.Collections.Generic;
using System.Text;

namespace DecoratorDesignPattern
{
    public class BMWCar : ICar
    {
        private string CarName = "BMW";
        public string CarBody { get; set; }
        public string CarDoor { get; set; }
        public string CarWheels { get; set; }
        public string CarGlass { get; set; }
        public string Engine { get; set; }
        public override string ToString()
        {
            return "BMWCar [CarName=" + CarName + ", CarBody=" + CarBody + ", CarDoor=" + CarDoor + ", CarWheels="
                            + CarWheels + ", CarGlass=" + CarGlass + ", Engine=" + Engine + "]";
        }
        public ICar ManufactureCar()
        {
            CarBody = "carbon fiber material";
            CarDoor = "4 car doors";
            CarWheels = "6 car glasses";
            CarGlass = "4 MRF wheels";
            return this;
        }
    }
}

Bước 3: Tạo Car Decorator.

CarDecorator.cs
using System;
using System.Collections.Generic;
using System.Text;

namespace DecoratorDesignPattern
{
    public abstract class CarDecorator : ICar
    {
        protected ICar car;
        public CarDecorator(ICar car)
        {
            this.car = car;
        }
        public virtual ICar ManufactureCar()
        {
            return car.ManufactureCar();
        }
    }
}

Bước 4: Tạo Diesel Car Decorator.

Đây là một class được kế thừa từ abstract class CarDecorator. Class này ghi đè phương thức ManufactureCar(). Những gì phương thức này làm là thêm một động cơ Diesel vào xe và trả lại chiếc xe BMW có động cơ Diesel.

DieselCarDecorator.cs
using System;
using System.Collections.Generic;
using System.Text;

namespace DecoratorDesignPattern
{
    public class DieselCarDecorator : CarDecorator
    {
        public DieselCarDecorator(ICar car) : base(car)
        {
        }
        public override ICar ManufactureCar()
        {
            car.ManufactureCar();
            AddEngine(car);
            return car;
        }
        public void AddEngine(ICar car)
        {
            if (car is BMWCar)
            {
                BMWCar BMWCar = (BMWCar)car;
                BMWCar.Engine = "Diesel Engine";
                Console.WriteLine("DieselCarDecorator added Diesel Engine to the Car : " + car);
            }
        }
    }
}

Bước 5: Tạo Petrol Car Decorator.

Tương tự như bước 4, sau khi thêm động cơ xăng vào sẽ trả lại chiếc BMW với động cơ đó.

PetrolCarDecorator.cs
using System;
using System.Collections.Generic;
using System.Text;

namespace DecoratorDesignPattern
{
    class PetrolCarDecorator : CarDecorator
    {
        public PetrolCarDecorator(ICar car) : base(car)
        {
        }
        public override ICar ManufactureCar()
        {
            car.ManufactureCar();
            AddEngine(car);
            return car;
        }
        public void AddEngine(ICar car)
        {
            if (car is BMWCar)
            {
                BMWCar BMWCar = (BMWCar)car;
                BMWCar.Engine = "Petrol Engine";
                Console.WriteLine("PetrolCarDecorator added Petrol Engine to the Car : " + car);
            }
        }
    }
}

Bước 6: Tạo Client.

Đầu tiên ta tạo đối tượng BMWCar sau đó gọi phương thức ManufatureCar sẽ tạo ra một chiếc xe không có động cơ.

Tiếp đến tạo instance của DieselCarDecorator và truyền instance BMWCar làm tham số. Khi chúng ta gọi hàm ManufatureCar() thì nó sẽ thêm động cơ Diesel vào ô tô.

Main
using System;

namespace DecoratorDesignPattern
{
    class Program
    {
        static void Main(string[] args)
        {
            ICar bmwCar1 = new BMWCar();
            bmwCar1.ManufactureCar();
            Console.WriteLine(bmwCar1 + "\n");
            DieselCarDecorator carWithDieselEngine = new DieselCarDecorator(bmwCar1);
            carWithDieselEngine.ManufactureCar();
            Console.WriteLine();
            ICar bmwCar2 = new BMWCar();
            PetrolCarDecorator carWithPetrolEngine = new PetrolCarDecorator(bmwCar2);
            carWithPetrolEngine.ManufactureCar();

            Console.Write("\n-------------------------\n");
            Console.WriteLine("Chuong trinh nay duoc dang tai Freetuts.net");
            Console.ReadKey();
        }
    }
}

Kết quả:

decorator 02 png

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

vào

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ụ

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ụ

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

Builder 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