设计模式学习--代理模式
2017-03-09 17:59
148 查看
代理模式,为其他对象提供一种代理以控制对这个对象的访问。
![](https://img-blog.csdn.net/20170309174332837?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGpmMTYxMTA1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
代理模式应用:
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;
}
通过代理类,主函数中只需知道女孩类和代理类,而不需要知道追求者。
代理模式应用:
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;
}
通过代理类,主函数中只需知道女孩类和代理类,而不需要知道追求者。
相关文章推荐
- 设计模式学习笔记十六:代理模式(Proxy Pattern)
- 设计模式学习(九)外观模式-享元模式-代理模式
- 设计模式学习-Proxy(代理模式)
- 学习设计模式——代理模式
- 软件工程 - 设计模式学习之代理模式Proxy
- 设计模式学习笔记(十三)——Proxy代理模式
- 设计模式学习之装饰模式和代理模式
- “设计模式”学习之五:桥接、外观、享元与代理(结构型)
- 步步为营 .NET 设计模式学习笔记 七、Proxy(代理模式)
- 学习:java设计模式—动态代理模式
- 代理模式【设计模式学习-04】
- 设计模式学习笔记--Proxy代理模式
- 步步为营 .NET 设计模式学习笔记 七、Proxy(代理模式
- 设计模式学习之 代理模式
- 设计模式学习笔记(十三)——Proxy代理模式
- 设计模式学习7 -- Proxy:代理模式
- 设计模式C++学习笔记之二(Proxy代理模式)
- 步步为营 .NET 设计模式学习笔记 七、Proxy(代理模式)
- HeadFirst 设计模式学习笔记8--代理模式
- 设计模式学习-每日一记(11.代理模式)