#include
using namespace std;
//代理模式中注意代理雖然可以實現某個功能,但是代理並不具備該功能,它的實現是通過調用別人的功能
//至於具體哪個功能,多態中基類指針指派生類對象,指向哪個派生類,就去調用哪個派生類的fun函數
class Base
{
public :virtual void fun()=0;
virtual ~Base(){}
};
class Derived:public Base
{
public :void fun()
{cout<<"Derived fun"<
};
class proxy:public Base
{
private:Base *pBase;//注意,這裡如果寫Derived類的對象或指針,當然可以實現,
//但是如果該代理類又要實現別的功能,就又要加該類的對象或指針。
//違背c++設計模式中開閉原則(開放接口,關閉修改)
public:proxy(Base *t){pBase=t;}
void fun()
{
pBase->fun();
}
};
int main (void)
{
Derived *pDerived=new Derived();
proxy *p=new proxy(pDerived);
p->fun();