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

Proxy 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 Proxy 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#.

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

Proxy Design Pattern trong C# là gì?

Proxy Design Pattern là một mẫu thiết kế ủy quyền. Nó cung cấp một đại diện thay thế cho đối tượng khác để kiểm soát quyền truy cập vào đối tượng đó.

Hiểu đơn giản hơn, thì Proxy Design Pattern như là một đối tượng trung gian. Khi chúng ta muốn thao tác với đối tượng chính đều phải thông qua nó.

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

proxy 01 png

Các loại Proxy Design Pattern:

  • Virtual Proxy: Là một trình giữ chổ cho các đối tượng "expensive to create". Đối tượng thực chỉ được tạo ra khi một khách hàng yêu cầu hoặc truy cập đầu tiên vào đối tượng.
  • Remote Proxy: Cung cấp đại diện cục bộ cho một đối tượng nằm trong một khoảng không gian địa chỉ khác.
  • Protection Proxy: Bảo vệ một đối tượng và kiểm tra xem người thao tác có quyền truy cập cần thiết trước khi chuyển tiếp yêu cầu hay không.

Ví dụ: Ví dụ cụ thể nhất cho Proxy Design Pattern đó chính là việc khi chúng ta rút tiền ở cây ATM, như hình dưới đây.

proxy 02 png

Khi chúng ta muốn rút tiền ở ngân hàng, thay vì phải đến trực tiếp ở đó, ta có thể đến cây ATM. Khi chúng ta thao tác rút tiền ở cây ATM, nó sẽ liên lạc với ngân hàng và xác nhận mã pin, số tiền cần rút. Nếu mọi thứ đều ổn thì cây ATM sẽ đưa tiền cho chúng ta.

Vì vậy, ngân hàng là đối tượng thực, còn cây ATM là đối tượng thay thế (đối tượng ủy quyền).

Tại sao nên sử dụng Proxy Design Pattern trong C#

Proxy Server chặn tất cả các yêu cầu đến với server thực để xem các yêu cầu này nó có tự thực hiện được hay không. Nếu không nó sẽ chuyển tiếp các yêu cầu đến máy chủ thực.

proxy 03 png

Proxy Server có hai mục tiêu chính như sau:

  • Improve Performance: Có thể cải thiện đáng kể hiệu suất của ứng dụng. Điều này là do nó lưu kết quả của một yêu cầu trong một khoảng thời gian nhất định.
  • Filter Requests: Có thể được sử dụng để lọc yêu cầu đến. Ví dụ: một công ty có thể sử dụng Proxy Server để ngăn chặn nhân viên truy cập vào một nhóm trang web cụ thể nào đó như Facebook, ... .

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

Trong phần này mình sẽ thực hiện triển khai Proxy Design Pattern trong C# thông qua một ví dụ cụ thể sau đây.

proxy 04 png

Như bạn có thể thấy ở hình trên, ở bên phải ta có một máy tính dùng chung có thư mục chia sẻ. Phía bên trái có các nhân viên đang làm việc cho một công ty phần mềm. Trong máy tính có một thư mục dùng chung chứa các thông tin bí mật mà chỉ có Manager và CEO có truyền truy cập. Còn các Developer thì không được phép truy cập vào.

Trong các tình huống như thế này thì chúng ta nên sử dụng Proxy Design Pattern để quản lý một cách dễ dàng.

Mình sẽ thực hiện triển khai ví dụ trên theo từng bước, các bạn theo dõi nhé.

Bước 1: Tạo class Employee.

Trong class có các thuộc tính của một nhân viên như: Username, Password, Role.

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

namespace ProxyDesignPattern
{
    public class Employee
    {
        public string Username { get; set; }
        public string Password { get; set; }
        public string Role { get; set; }
        public Employee(string username, string password, string role)
        {
            Username = username;
            Password = password;
            Role = role;
        }
    }
}

Bước 2: Tạo interface ISharedFolder.

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

namespace ProxyDesignPattern
{
    public interface ISharedFolder
    {
        void PerformRWOperations();
    }
}

Bước 3: Tạo Real Object (đối tượng thực).

Class này thực hiện interface ISharedFolder.

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

namespace ProxyDesignPattern
{
    public class SharedFolder : ISharedFolder
    {
        public void PerformRWOperations()
        {
            Console.WriteLine("Performing Read Write operation on the Shared Folder");
        }
    }
}

Bước 4: Tạo Proxy Object (đối tượng thay thế).

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

namespace ProxyDesignPattern
{
    class SharedFolderProxy : ISharedFolder
    {
        private ISharedFolder folder;
        private Employee employee;
        public SharedFolderProxy(Employee emp)
        {
            employee = emp;
        }
        public void PerformRWOperations()
        {
            if (employee.Role.ToUpper() == "CEO" || employee.Role.ToUpper() == "MANAGER")
            {
                folder = new SharedFolder();
                Console.WriteLine("Shared Folder Proxy makes call to the RealFolder 'PerformRWOperations method'");
                folder.PerformRWOperations();
            }
            else
            {
                Console.WriteLine("Shared Folder proxy says 'You don't have permission to access this folder'");
            }
        }
    }
}

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

Program.cs
using System;

namespace ProxyDesignPattern
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Client passing employee with Role Developer to folderproxy");
            Employee emp1 = new Employee("Anurag", "Anurag123", "Developer");
            SharedFolderProxy folderProxy1 = new SharedFolderProxy(emp1);
            folderProxy1.PerformRWOperations();
            Console.WriteLine();
            Console.WriteLine("Client passing employee with Role Manager to folderproxy");
            Employee emp2 = new Employee("Pranaya", "Pranaya123", "Manager");
            SharedFolderProxy folderProxy2 = new SharedFolderProxy(emp2);
            folderProxy2.PerformRWOperations();

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

Kết quả:

proxy 05 png

Như vậy là chúng ta đã cùng nhau tìm hiểu về Proxy 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 Iterator 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ụ

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ụ

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