设计模式(C++实现)(六)——代理模式

示例问题:

如何隐藏外界对一个对象的访问,且要使用该对象的功能?

分析:

代理模式,就是为其他对象提供一种代理以控制对这个对象的访问。

解决方案:

Proxy.h

其中CChildB类代理了CChildA类的功能

#pragma once

#include 

class CBase
{
public:
	CBase()
	{

	}

	virtual ~CBase()
	{

	}

	virtual void DoSomething() = 0;
};

class CChildA : public CBase
{
public:
	CChildA()
	{

	}

	virtual ~CChildA()
	{

	}

	void DoSomething()
	{
		std::cout << "I'm CChildA, do something" << std::endl;
	}
};

class CChildB : public CBase
{
public:
	CChildB()
	{

	}

	virtual ~CChildB()
	{

	}

	void DoSomething()
	{
		m_ChildA.DoSomething();
	}

private:
	CChildA m_ChildA;
};

main.cpp

// main.cpp : 定义控制台应用程序的入口点。
//

#include "Proxy.h"


int main()
{
	CChildB ChildB;
	ChildB.DoSomething();
	system("pause");
    return 0;
}

结果:

 

代理模式解决的问题:

代理模式,为其他对象提供一种代理以控制对这个对象的访问。

何时使用代理模式:

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

    例如:WebService在.NET的应用,当在应用程序的项目中加入一个Web引用,引用一个WebService,此时会在项目中生成一个WebReference的文件夹和一些文件,其实这就是代理,使得客户端程序调用代理就可以解决远程访问的问题。

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

    例如:当开发一个很大的html网页时,里面可能有很多的文字和图片,但你还是可以很快打开它,此时你所看到的是所有的文字,但是图片确实一张一张的慢慢才显示出来。那些最开始没有加载出来的图片,会有一个图片框或者默认背景,就是通过虚拟代理来替代了真实的图片,此时代理存储了真实图片的路径和尺寸。

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

    例如:dll、lib的使用,也可理解成为一种代理模式。

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

    例如:计算真实对象的引用次数等。

 

返回目录:设计模式(C++实现)(总)

上一篇:设计模式(C++实现)(五)——装饰模式

下一篇:设计模式(C++实现)(七)——迭代器模式

 

你可能感兴趣的:(设计模式,设计模式,代理模式,C++)