Chúng ta sẽ xem Proxy class trong C++ là gì. Proxy class cơ bản là mẫu thiết kế Proxy (Proxy design pattern). Trong mẫu này, một đối tượng cung cấp giao diện sửa đổi cho một lớp khác. Xem ví dụ.
Trong ví dụ này, ta muốn tạo lớp mảng chỉ lưu giá trị nhị phân [0, 1]. Lần thử đầu tiên:
Ví dụ Code
class BinArray {
int arr[10];
int & operator[](int i) {
// Đặt code kiểm tra ở đây
}
};
Code này không kiểm tra điều kiện. Nhưng ta muốn operator[] báo lỗi nếu gán arr[1] = 98. Không thể, vì nó kiểm tra chỉ số chứ không phải giá trị. Ta sẽ giải quyết bằng mẫu Proxy.
Ví dụ Code
#include <iostream>
using namespace std;
class ProxyPat {
private:
int * my_ptr;
public:
ProxyPat(int& r) : my_ptr(&r) { }
void operator = (int n) {
if (n > 1) {
throw "This is not a binary digit";
}
*my_ptr = n;
}
};
class BinaryArray {
private:
int binArray[10];
public:
ProxyPat operator[](int i) {
return ProxyPat(binArray[i]);
}
int item_at_pos(int i) {
return binArray[i];
}
};
int main() {
BinaryArray a;
try {
a[0] = 1; // Không ném ngoại lệ
cout << a.item_at_pos(0) << endl;
}
catch (const char * e) {
cout << e << endl;
}
try {
a[1] = 98; // Ném ngoại lệ
cout << a.item_at_pos(1) << endl;
}
catch (const char * e) {
cout << e << endl;
}
}
Kết quả
1 This is not a binary digit