簡介:
其實每個模式名稱就表明了該模式的作用,代理模式就是多一個代理類出來,替原對象進行一些操作,比如我們在租房子的時候回去找中介,爲什麼呢?因爲你對該地區房屋的信息掌握的不夠全面,希望找一個更熟悉的人去幫你做,此處的代理就是這個意思。再如我們有的時候打官司,我們需要請律師,因爲律師在法律方面有專長,可以替我們進行操作,表達我們的想法。
角色與職責:
Subject: 抽象角色。聲明真實對象和代理對象的共同接口。
Proxy: 代理角色。代理對象與真實對象實現相同的接口,所以它能夠在任何時刻都能夠代理真實對象。代理角色內部包含有對真實對象的引用,所以她可以操作真實對象,同時也可以附加其他的操作,相當於對真實對象進行封裝。
RealSubject: 真實角色。它代表着真實對象,是我們最終要引用的對象
實現:
#include <iostream>
using namespace std;
class IFactory {
public:
IFactory() {}
virtual void makeProduct() = 0;
};
class PhoneFactory : public IFactory{
public:
PhoneFactory() {}
virtual void makeProduct(){
cout << "生產手機" << endl;
}
};
class FoxconnProxy : public IFactory{
public:
FoxconnProxy(IFactory* factory){
m_real = factory;
}
virtual void makeProduct(){
highProduct();
m_real->makeProduct();
}
void highProduct() {
cout << "高速生成手機" << endl;
}
private:
IFactory* m_real;
};
int main(int argc, char* argv[]) {
IFactory* factory = new PhoneFactory();
FoxconnProxy* foxconn = new FoxconnProxy(factory);
foxconn->makeProduct();
cin.get();
return 0;
}