概念
代理模式:为其他对象提供一种代理以控制对这个对象的访问
使用场景
想在访问一个类时做一些控制;直接访问对象时会带来的问题,比如说:要访问的对象在远程的机器上。
一般步骤
将被代理者和代理者的共同行为抽象出来作为一个类;
class GiveGift
{
public:
virtual void GiveDolls() = 0;
virtual void GiveFlowers() = 0;
virtual void GiveChocolate() = 0;
};
写被代理者的类;
class Pursuit : public GiveGift
{
public:
Pursuit(SchoolGirl
*mm
)
{
this->mm
= mm
;
}
void GiveDolls()
{
cout
<< mm
->name
<< "送你洋娃娃" << endl
;
}
void GiveFlowers()
{
cout
<< mm
->name
<< "送你鲜花" << endl
;
}
void GiveChocolate()
{
cout
<< mm
->name
<< "送你巧克力" << endl
;
}
private:
SchoolGirl
*mm
;
};
写代理者类,里面的行为全部调用被代理者的行为;
class Proxy : public GiveGift
{
public:
Proxy(SchoolGirl
*mm
)
{
gg
= new Pursuit(mm
);
}
void GiveDolls()
{
gg
->GiveDolls();
}
void GiveFlowers()
{
gg
->GiveFlowers();
}
void GiveChocolate()
{
gg
->GiveChocolate();
}
private:
Pursuit
*gg
;
};
具体实例
#include <iostream>
#include <string>
using namespace std
;
class SchoolGirl
{
public:
SchoolGirl(string name
)
{
this->name
= name
;
}
string name
;
};
class GiveGift
{
public:
virtual void GiveDolls() = 0;
virtual void GiveFlowers() = 0;
virtual void GiveChocolate() = 0;
};
class Pursuit : public GiveGift
{
public:
Pursuit(SchoolGirl
*mm
)
{
this->mm
= mm
;
}
void GiveDolls()
{
cout
<< mm
->name
<< "送你洋娃娃" << endl
;
}
void GiveFlowers()
{
cout
<< mm
->name
<< "送你鲜花" << endl
;
}
void GiveChocolate()
{
cout
<< mm
->name
<< "送你巧克力" << endl
;
}
private:
SchoolGirl
*mm
;
};
class Proxy : public GiveGift
{
public:
Proxy(SchoolGirl
*mm
)
{
gg
= new Pursuit(mm
);
}
void GiveDolls()
{
gg
->GiveDolls();
}
void GiveFlowers()
{
gg
->GiveFlowers();
}
void GiveChocolate()
{
gg
->GiveChocolate();
}
private:
Pursuit
*gg
;
};
int main()
{
SchoolGirl
*jiaojiao
= new SchoolGirl("李娇娇");
Proxy
*DaiLi
= new Proxy(jiaojiao
);
DaiLi
->GiveDolls();
DaiLi
->GiveFlowers();
DaiLi
->GiveChocolate();
return 0;
}
参考资料
《大话设计模式》
转载请注明原文地址:https://ipadbbs.8miu.com/read-63367.html