当前位置:编程学习 > C/C++ >>

proxy patter --代理模式

对于复杂的软件系统常常有一种处理手法,即增加一层间接层,从而使得系统获得一种更为灵活、满足特定需求的解决方案。在面向对象的系统中,有些对象由于某种原因,比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等,直接访问会给使用者或者系统结构带来很多麻烦。
Proxy设计模式就是在不失去透明操作对象的同时,通过增加一层间接层来管理、控制这些对象特有的复杂性。
[cpp]  
// Proxy.h  
#include <string>  
#include <iostream>  
#include <string>  
   
class IEmployee  
{  
public:  
         virtual string get_name(int ID) = 0;  
         virtual int get_age(int ID) = 0;  
         virtual double get_salary(int ID) = 0;  
   
public:  
         virtual ~IEmployee();  
};  
   
IEmployee::~IEmployee()  
{  
         cout << "in the destructor of IEmployee..." << endl;  
}  
   
class Employee : public IEmployee  
{  
public:  
         string get_name(int ID);  
         int get_age(int ID);  
         double get_salary(int ID);  
         ~Employee();  
};  
   
string Employee::get_name(int ID)  
{  
         // ... 假定此处查询数据库,获得ID对应员工的姓名  
         string name = "tom";  
         return name;  
}  
   
int Employee::get_age(int ID)  
{  
         // ... 假定此处查询数据库,获得ID对应员工的年龄  
         int age = 20;  
         return age;  
}  
   
double Employee::get_salary(int ID)  
{  
         // ... 假定此处查询数据库,获得ID对应员工的工资  
         double salary = 100000.00;  
         return salary;  
}  
   
Employee::~Employee()  
{  
         cout << "in the destructor of Employee..." << endl;  
}  
   
//代理  
class EmployeeProxy : public IEmployee  
{  
public:  
         string get_name(int ID);  
         int get_age(int ID);  
         double get_salary(int ID);  
         ~EmployeeProxy();  
};  
   
string EmployeeProxy::get_name(int ID)  
{  
         // ...假定此处通过socket或者RPC等其他方式访问Employee中的get_name(int ID)方法,并接受相应的返回值  
         string name = "tom";  
         return name;  
}  
   
int EmployeeProxy::get_age(int ID)  
{  
         // ...假定此处通过socket或者RPC等其他方式访问Employee中的get_age(int ID)方法,并接受相应的返回值  
         int age = 20;  
         return age;  
}  
   
double EmployeeProxy::get_salary(int ID)  
{  
         // ...假定此处通过socket或者RPC等其他方式访问Employee中的get_salary(int ID)方法,并接受相应的返回值  
         double salary = 100000.00;  
         return salary;  
}  
   
EmployeeProxy::~EmployeeProxy()  
{  
         cout << "in the destructor of EmployeeProxy..." << endl;  
}  
   
// Proxy.cpp  
#include "Proxy.h"  
   
int main(int argc, char **argv)  
{  
         IEmployee *employee = new EmployeeProxy;  
         cout << employee->get_name(10) << endl;  
         cout << employee->get_age(10) << endl;  
         cout << employee->get_salary(10) << endl;  
         delete employee;  
   
         return 0;  
}  
 
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,