标签:alt client 分享 另一个 情况 访问 情况下 inf 它的
代理模式:为其他对象提供一种代理以控制对这个对象的访问。这样实现了业务和核心功能分离。
在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式的优点:1.职责清晰;2.易扩展;3.减低耦合,可以保护目标对象。
代理模式的缺点:1.由于在客户端和真实对象之间增加了代理对象,因此可能会造成额外的开销或者请求处理速度变慢;2.实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
代理模式其实只是加强了对接口的管理,并不是为了修改或则增强接口功能,这是和适配器模式、装饰模式的主要区别。
简单的UML图可以表示如下:
一个简单的实现:
#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;
}
标签:alt client 分享 另一个 情况 访问 情况下 inf 它的
原文地址:https://www.cnblogs.com/xl2432/p/10121517.html