0
点赞
收藏
分享

微信扫一扫

【设计模式7】代理模式


基本概念

(1)代理模型:为其他对象提供一种代理以控制这个对象的访问。

(2)代理模式的适用场景:远程代理,也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实;虚拟代理,根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象,从而达到性能优化的目的;安全代理,用来控制真实对象访问时的权限;智能指引,当调用真实的对象时,代理处理另外一些事。

(3)代理模式一般结构

【设计模式7】代理模式_地址空间


Subject:定义了RealSubject 和 Proxy 的公共接口,这就在任何使用 RealSubject 的地方都可以使用Proxy

RealSubject类,定义Proxy 所代表的真实实体;

Proxy类,保存一个引用使得代理可以访问实体,并提供一个与Subject 的接口相同的接口,这样代理就可以用来替代实体。

具体案例

【设计模式7】代理模式_地址空间_02


【设计模式7】代理模式_代理模式_03

具体实现(VS,C++)

//#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;

class SchoolGirl
{
public:
	SchoolGirl();
	~SchoolGirl();
	SchoolGirl(string name) {
		this->name = name;
	}
	string getName() {
		return name;
	}
	void setName(string name) {
		this->name = name;
	}

private:
	string name;
};


class GiveGift
{
public:
	GiveGift();
	~GiveGift();
	virtual void giveDolls() = 0;
	virtual void giveFlowers() = 0;
	virtual void giveChocolate() = 0;
private:

};

class Presuit:public GiveGift
{
public:
	Presuit();
	~Presuit();
	SchoolGirl myGirl;
	Presuit(SchoolGirl myGirl) {
		this->myGirl = myGirl;
	}
	void giveDolls() {
		cout << myGirl.getName() << "送你洋娃娃" << endl;
	}
	void giveFlowers() {
		cout << myGirl.getName() << "送你鲜花" << endl;

	}
	void giveChocolate() {
		cout << myGirl.getName() << "送你巧克力" << endl;
	}

private:

};

class Proxy:public GiveGift
{
public:
	Proxy();
	~Proxy();
	Presuit littleDog;
	Proxy(SchoolGirl myGirl) {
		littleDog = Presuit(myGirl);
	}
	void giveDolls() {
		littleDog.giveDolls();
	}
	void giveFlowers() {
		littleDog.giveFlowers();

	}
	void giveChocolate() {
		littleDog.giveChocolate();
	}

private:

};

Presuit::Presuit()
{
}

Presuit::~Presuit()
{
}

SchoolGirl::SchoolGirl()
{
}

SchoolGirl::~SchoolGirl()
{
}
Proxy::Proxy()
{
}

Proxy::~Proxy()
{
}

GiveGift::GiveGift()
{
}

GiveGift::~GiveGift()
{
}


int main(int argc, char** argv)
{
	SchoolGirl bestWish("徐念");
	Proxy myBoy(bestWish);//中间代理(套娃)
	myBoy.giveDolls();
	myBoy.giveDolls();
	myBoy.giveFlowers();
	return 0;
}

关于作者

长期从事编程相关研究,涉及Qt、机械臂、轮式机器人、四足机器人的建模及仿真,可共同探讨编程相关问题,可指导课程设计及毕业设计,详询:QQ:2963325158


举报

相关推荐

0 条评论