Proxy Pattern
Nguy?n ??ng Khoa
??Fullstack Developer | PHP | ReacJS | NodeJS | SQL | Database??
Proxy là m?t m?u thi?t k? c?u trúc cho phép b?n cung c?p m?t thay th? ho?c gi? ch? cho m?t ??i t??ng khác. M?t proxy ki?m soát quy?n truy c?p vào ??i t??ng ban ??u, cho phép b?n th?c hi?n ?i?u gì ?ó tr??c ho?c sau khi yêu c?u ???c chuy?n ??n ??i t??ng ban ??u.
?? V?n ??
T?i sao b?n mu?n ki?m soát quy?n truy c?p vào m?t ??i t??ng? ?ay là m?t ví d?: b?n có m?t ??i t??ng kh?ng l? tiêu t?n m?t l??ng l?n tài nguyên h? th?ng. Th?nh tho?ng b?n c?n nó, nh?ng kh?ng ph?i lúc nào c?ng v?y.
B?n có th? tri?n khai lazy initialization: ch? t?o ??i t??ng này khi th?c s? c?n thi?t. T?t c? các khách hàng c?a ??i t??ng s? c?n th?c thi m?t s? m? deferred initialization. Th?t kh?ng may, ?i?u này có th? s? gay ra r?t nhi?u trùng l?p m?.
Trong m?t th? gi?i ly t??ng, chúng t?i mu?n ??a m? này tr?c ti?p vào l?p ??i t??ng c?a mình, nh?ng ?i?u ?ó kh?ng ph?i lúc nào c?ng có th?. Ví d?, class có th? là m?t ph?n c?a closed 3rd-party library.
?? Gi?i Pháp
Proxy Pattern g?i y r?ng b?n t?o m?t class proxy m?i v?i cùng interface v?i m?t ??i t??ng d?ch v? ban ??u. Sau ?ó, b?n c?p nh?t ?ng d?ng c?a mình ?? nó chuy?n ??i t??ng proxy cho t?t c? các clients c?a ??i t??ng ban ??u. Khi nh?n ???c yêu c?u t? clients, proxy t?o ra m?t ??i t??ng d?ch v? th?c s? và ?y thác t?t c? c?ng vi?c cho nó.
Nh?ng l?i ích là gì? N?u b?n c?n th?c hi?n m?t cái gì ?ó tr??c ho?c sau logic chính c?a l?p, proxy cho phép b?n làm ?i?u này mà kh?ng c?n thay ??i l?p ?ó. Vì proxy tri?n khai interface gi?ng nh? l?p ban ??u, nó có th? ???c chuy?n cho b?t k? client nào mong ??i m?t ??i t??ng d?ch v? th?c.
?Kh? n?ng ?ng d?ng