2. 代理模式(C++)

1.介绍

代理模式:为其他对象提供一种代理以控制对这个对象的访问。这样实现了业务和核心功能分离。
在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

代理模式的优点:1.职责清晰;2.易扩展;3.减低耦合,可以保护目标对象。
代理模式的缺点:1.由于在客户端和真实对象之间增加了代理对象,因此可能会造成额外的开销或者请求处理速度变慢;2.实现代理模式需要额外的工作,有些代理模式的实现非常复杂。

代理模式其实只是加强了对接口的管理,并不是为了修改或则增强接口功能,这是和适配器模式、装饰模式的主要区别。

2. UML

简单的UML图可以表示如下:

  • Subject(抽象主题):声明了 RealSubject 与 Proxy 的共同接口;
  • RealSubject(真实主题):执行具体的业务逻辑,Proxy 控制对它的访问;
  • Proxy(代理):持有一个 RealSubject 引用(指针),可以在需要时将请求转发给 RealSubject,以此起到代理的作用;
  • Client(客户端):调用方。

3. 实现

一个简单的实现:

#include <iostream>
#include <memory>

class Subject {
public:
	virtual ~Subject() {}
	virtual void Request() = 0;
};

class RealSubject: public Subject{
public:
	void Request() {
		std::cout << "RealSubject::Request()..." << std::endl;
	}
};

class Proxy: public Subject{
public:
	Proxy(std::shared_ptr<Subject> subject): subject_(subject) {}
	~Proxy() {}
	void Request() {
		std::cout << "Proxy::Request()..." << std::endl;
		if(subject_) {
			subject_->Request();
		} else {
			std::cout << "Invalid real subject!" << std::endl;
		}
	}
private:
	std::shared_ptr<Subject> subject_;
};

int main() {
	Proxy proxy(std::make_shared<RealSubject>());
	proxy.Request();
	return 0;
}
posted @ 2018-12-14 20:16  星星,风,阳光  阅读(200)  评论(0编辑  收藏  举报