Design Patterns: Proxy

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Thuộc nhóm: Structural

Tần suất sử dụng: Cao

Vấn đề đặt ra

Lý do để điều khiển truy nhập tới một đối tượng là làm theo toàn bộ quá trình tạo ra và khởi đầu của nó cho tới tận khi thực sự chúng ta cần sử dụng nó.Trong trường hợp này ta nên dùng mẫu thiết kế proxy. Proxy có thể được ứng dụng tại bất cứ nơi nào mà ở đó cần có một sự tham chiếu tới một đối tượng linh hoạt hơn, tinh xảo hơn so với việc sử dụng một con trỏ đơn giản.

Sau đây là một vài trường hợp thông thường trong đó proxy được vận dụng:

  • Một remote proxy cung cấp một biểu diễn (một mẫu) cục bộ cho một đối tượng trong một không gian địa chỉ khác.
  • Một virtual proxy tạo ra một đối tượng có chi phí cao theo yêu cầu.
  • Một protection proxy điều khiển việc truy nhập đối tượng gốc. Các protection proxy rất hữu ích khi các đối tượng có các quyền truy nhập khác nhau.
  • Một smart reference là sự thay thế cho một con trỏ rỗng cho phép thực hiện các chức năng thêm vào khi một đối tượng được truy nhập. Các trường hợp sử dụng điển hình:
    • Đếm số tham chiếu tới đối tượng thực, do đó nó có thể tự động giải phóng khi có không nhiều các tham chiếu.
    • Tải một đối tượng liên tục vào bộ nhớ khi nó được tham chiếu lần đầu tiên.
    • Kiểm tra đối tượng thực đó có được khóa hay không trước khi nó bị truy nhập để đảm bảo không đối tượng nào khác có thể thay đổi nó.

Định nghĩa

Cung cấp một đại diện cho một đối tượng khác để điều khiển việc truy nhập nó.

Sơ đồ UML

Proxy: Sơ đồ UML

Proxy (MathProxy)

  • Duy trì một tham chiếu để cho proxy truy cập vào một đối tượng thực. Proxy có thể tham khả đến một chủ thể nếu như giao diện của RealSubject và Subject là như nhau.
  • Cung cấp một giao diện xác định Subject để một proxy có thể thay thế cho đối tượng thực.
  • Điều khiển truy cập tới đối tượng thực và có thể chịu trách nhiệm tạo ra và xoá nó đi.
  • Trong các nhiệm vụ khác phụ thuộc vào từng loại proxy:
    • Remote proxies chịu trách nhiệm cho việc mã hoá một yêu cầu và các tham số của nó và để truyền yêu cầu mã hoá cho chủ thể trong không gian địa chỉ khác.
    • Virtual proxies có thể thêm phần thông tin đệm về chủ thể thực để chúng có thể trì hoãn truy nhập nó.
    • Protection proxies kiểm tra đối tượng gọi đã có yêu cầu quyền truy nhập để thực hiện một yêu cầu.

Subject (IMath)

  • Định nghĩa một giao diện chung cho chủ thể thực và Proxy để proxy có thể sử dụng ở mọi nơi mà một RealSubject mong đợi.

RealSubject (Math)

  • Định nghĩa đối tượng thực mà proxy đại diện.

Mẫu liên quan

Một Adapter cung cấp một giao diện khác với đối tượng mà nó thích nghi. Trong trường hợp này, một Proxy cung cấp cùng một giao diện như vậy giống như một chủ thể.

Mặc dù decorator có thể có cài đặt tương tự như các proxy, decorator có một mục đích khác. Một decorator phụ thêm nhiều nhiệm vụ cho một đối tượng nhưng ngược lại một proxy điều khiển truy cập đến một đối tượng.

Proxy tuỳ biến theo nhiều cấp khác nhau mà chúng có thể sẽ được cài đặt giống như một decorator. Một proxy bảo vệ có thể được cài đặt chính xác như một decorator. Mặt khác một proxy truy cập đối tượng từ xa sẽ không chứa một tham chiếu trực tiếp đến chủ thể thực sự nhưng chỉ duy nhất có một tham chiếu trực tiếp, giống như ID của host và địa chỉ trên host vậy. Một proxy ảo sẽ bắt đầu với một tham chiếu gián tiếp chẳng hạn như tên file nhưng rốt cuộc rồi cũng sẽ đạt được một tham chiếu trực tiếp.

» Tiếp: Các mẫu Behavioral
« Trước: Flyweight
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!