设计模式(5)-己所不欲,施之于人(代理模式)

简介: 什么是代理?在我们的日常生活中的例子非常多。 比如上网有的时候使用代理服务器,通过代理上网,这就是代理的一个非常常见的例子。 从这里边可以看到3个对象:真实网路对象,代理对象还有客户端对象。 真实对象和代理对象还都有访问网络的方法所以抽象出网络对象。

什么是代理?在我们的日常生活中的例子非常多。

比如上网有的时候使用代理服务器,通过代理上网,这就是代理的一个非常常见的例子。

从这里边可以看到3个对象:真实网路对象,代理对象还有客户端对象。

真实对象和代理对象还都有访问网络的方法所以抽象出网络对象。

 对应的类图关系如下:

img_364de27d78bed7888314f2050589d860.jpg

如图:

真实的网络被隐藏起来,我们访问的是代理的网络对象,同时我们可以在访问代理对象的同时动态的加上比如验证用户,清除用户信息的方法。

生成的文件如下:

client.h

class Client
{

public:
	Client();
	virtual ~Client();

};

client.cpp

#include "Client.h"
#include "Network.h"
#include "ProxyNetwork.h"

Client::Client(){

}

Client::~Client(){

}

int main(){
	ProxyNetwork* proxyNetwork = new ProxyNetwork();
	proxyNetwork->browse();
	return 0;
}

Network.h

#include <iostream>

using namespace std;

class Network
{

public:
	Network();
	virtual ~Network();

	virtual void browse() = 0;

};

Network.cpp

#include "Network.h"


Network::Network(){

}

Network::~Network(){

}

ProxyNetwork.h

#include "RealNetwork.h"
#include "Network.h"

class ProxyNetwork : public Network
{

public:
	ProxyNetwork();
	virtual ~ProxyNetwork();
	RealNetwork* realNetwork;

	virtual void browse();
	
private:
	void checkUser();
	void clearUserinfo();

};

ProxyNetwork.cpp

#include "ProxyNetwork.h"

ProxyNetwork::ProxyNetwork(){

}

ProxyNetwork::~ProxyNetwork(){

}

void ProxyNetwork::browse(){
	ProxyNetwork::checkUser();
	realNetwork = new RealNetwork();
	realNetwork->browse();
	ProxyNetwork::clearUserinfo();
}

void ProxyNetwork::checkUser(){
	cout<<"调用真实对象之前检验用户名"<<endl;
}

void ProxyNetwork::clearUserinfo(){
	cout<<"调用真实对象之后清除用户信息"<<endl;	
}

RealNetwork.h

#include "Network.h"

class RealNetwork : public Network
{

public:
	RealNetwork();
	virtual ~RealNetwork();

	virtual void browse();

};

RealNetwork.cpp

#include "RealNetwork.h"


RealNetwork::RealNetwork(){

}

RealNetwork::~RealNetwork(){

}

void RealNetwork::browse(){
	cout<<"访问真实网路..."<<endl;
}

运行client.cpp中的main,我们得到如下:

img_c0f7c469e09da05e3dbb932742dd8561.jpg

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

代理模式的几种应用场景:

1,远程代理,为一个对象在不同的空间提供局部代表,隐藏真实对象,webservice的调用就是一个最好的例子。

2,虚拟代理,根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。浏览网页时,我们访问缓存中的对象就是其中一个例子。

3,安全代理,控制真实对象的访问权限,不让外部看到真实的网络情况。上边的例子就是一个比较好的实例。

目录
相关文章
|
4月前
|
设计模式 缓存 安全
设计模式——代理模式
静态代理、JDK动态代理、Cglib 代理
设计模式——代理模式
|
8月前
|
设计模式 Dubbo Java
设计模式-代理模式
设计模式-代理模式
42 0
|
8月前
|
设计模式 缓存 安全
设计模式之代理模式(1)
设计模式之代理模式(1)
|
8月前
|
设计模式
设计模式 | 代理模式
设计模式 | 代理模式
27 0
|
8月前
|
设计模式 缓存 前端开发
【设计模式】之代理模式
代理模式是一种常用的设计模式,它通过创建一个代理对象来控制对另一个对象的访问。通过使用代理模式,可以实现对目标对象的访问控制、增加额外功能、解耦客户端与目标对象等。然而,需要根据具体情况权衡使用代理模式所带来的优缺点。
84 0
|
设计模式 消息中间件 存储
一起来学设计模式之代理模式
前言 目前正在出一个设计模式专题系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~ 本节给大家讲一下设计模式中的代理模式,并结合实际业务场景给大家讲解如何使用~ 本专题的所有案例代码主要以Java语言为主, 好了, 废话不多说直接开整吧~ 代理模式 代理模式是一种常见的设计模式,它为其他对象提供了一种代理以控制对这个对象的访问。 在代理模式中,我们定义了一个代理类,代理类持有一个真正执行业务逻辑的对象的引用,客户端调用代理对象的方法时,实际上是在调用真正对象的方法,代理对象可以在调用真正对象的方法前后进行一些处理,如记录日志、缓存结果、权限校验等。
|
设计模式 Arthas 监控
《设计模式》代理模式
《设计模式》代理模式
《设计模式》代理模式
|
设计模式 网络安全
23种设计模式——代理模式
代理模式就是给一个对象提供一个代理,并由代理对象控制对原对象的引用。
119 0
23种设计模式——代理模式
|
设计模式 Java
设计模式-8-代理模式
代理模式(Proxy Pattern)就是提供一个代理对象,这个对象可以作为其他对象的代理来控制对其他对象的访问。一个类代表另一个类的功能。属于结构型模式。
71 0
设计模式-8-代理模式
|
设计模式 Java 数据库连接
设计模式之代理模式
本文由老王出租房子引出——代理设计模式,将从最简单的静态代理实现开始,后延伸使用jdk实现动态代理,最后扩展到Cglib实现动态代理。为了更深入理解代理模式,我们会对实际应用中的典型案例进行介绍,包括在Spring和Mybatis中的应用。