您的位置:首页 > 其它

设计模式学习--代理模式

2017-03-09 17:59 148 查看
  代理模式,为其他对象提供一种代理以控制对这个对象的访问。


代理模式应用:

  1、远程代理,也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。

    2、虚拟代理,根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。

    3、安全代理,用来控制真实对象访问时的权限。

    4、智能指引,当调用真实对象时,代理处理另外一些事。

#include <iostream>
#include <string>

using namespace std;

class GiveGift //接口类 用于存放虚函数
{
public:
virtual void GiveDolls(){return;} //虚函数 送洋娃娃
virtual void GiveFlowers(){return;} //虚函数 送鲜花
virtual void GiveChocolate(){return;} //虚函数 送巧克力
};

class Girl //被追求者 接收礼物的女孩
{
string m_name; //女孩名字
public:
Girl(string name):m_name(name){}; //构造函数 传入女孩名字
string getname(){return m_name;} //获取女孩名字
};

class Pursult : public GiveGift //追求者类
{
Girl* m_mm; //女孩类指针
public:
Pursult(Girl* mm):m_mm(mm){}; //构造函数 传入被追求者 女孩
void GiveDolls() //虚函数的补全 送洋娃娃
{
cout<<m_mm->getname()<<" 送你洋娃娃"<<endl;
}

void GiveFlowers() //虚函数的补全 送鲜花
{
cout<<m_mm->getname()<<" 送你鲜花"<<endl;
}

void GiveChocolate() //虚函数的补全 送巧克力
{
cout<<m_mm->getname()<<" 送你巧克力"<<endl;
}
};

class Proxy : public GiveGift //代理类 负责替追求者向女孩送礼物
{
Pursult* gg; //追求者类指针
public:
Proxy(Girl* mm) //构造函数 通过传入的女孩名字实例化追求者
{
gg = new Pursult(mm);
}
void GiveDolls() //代理者送洋娃娃
{
gg->GiveDolls();
}

void GiveFlowers() //代理者送鲜花
{
gg->GiveFlowers();
}

void GiveChocolate() //代理者送巧克力
{
gg->GiveChocolate();
4000

}
};

int main()
{
Girl* mm = new Girl("小雪"); //实例化女孩

Proxy* daili = new Proxy(mm); //实例化代理

daili->GiveDolls(); //代理者送洋娃娃
daili->GiveFlowers(); //代理者送鲜花
daili->GiveChocolate(); //代理者送巧克力

return 0;
}

通过代理类,主函数中只需知道女孩类和代理类,而不需要知道追求者。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: