设计模式-代理模式的优缺点
  AWwQJA71Um8k 2023年12月15日 15 0

与前几篇常用的的创建型设计模式(单例模式,工厂模式)不同,今天要说的是常用的结构型模式之一:代理模式

在说代理模式之前,回顾一下创建型设计模式,创建型模式它的主要特点是“将对象的创建与使用分离“ 。在类对象的创建上更加的灵活。

那么结构型模式又有什么不同呢?

结构型模式关注类和对象的组命。继承的概念被用来组合接口和定义组合对象获得新功能的方式。

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

简单来说,在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

设计模式-代理模式的优缺点_结构型模式


  • 代理对象⻆色内部含有对真实对象的引用,从而可以操作真实对象,
  • 同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。
  • 代理对象可以在执行真实对象操作时,附加其它的操作,相当于对真实对象进行封装。

看一下示例代码:

ITcompany.h
#ifndef _IT_COMPANY_HEAD_H
#define _IT_COMPANY_HEAD_H
#include <iostream>
using namespace std;
class ItCompany{
public:
virtual void programCode(const string &lang) = 0;
};
#endif
#ifndef _OUTSOUCE_COMPANY_HEAD_
#define _OUTSOUCE_COMPANY_HEAD_

main.cpp
#include "ItCompany.h"
class OutsourceCompany : public ItCompany{
public:
		OutsourceCompany(ItCompany *it){
		this->it = it;
	}
  
void programCode(const string &lang){
  
		if(lang != "c++" && lang != "c" && lang != "java"){
			cout << "I can not use this language : " << lang << endl;
			return;
		}
		it->programCode(lang);
	}
private:
ItCompany *it;
};
#endif
#ifndef _NB_COMAPNY_HEAD_
#define _NB_COMAPNY_HEAD_
#include "ItCompany.h"
class NbCompany:public ItCompany{
public:
		void programCode(const string &lang){
      
			cout << "we use language : " << lang << " development software" << endl;
		}
};
#endif

#include "OutsourceCompany.h"
#include "NbCompany.h"
int main(void)
{
		OutsourceCompany *proxyComany = new OutsourceCompany(new NbCompany);
		proxyComany->programCode("c++");
		proxyComany->programCode("python");
		return 0;
}

优点

  • 代理模式能够将真正被调用的对象进行隔离,在一定程度上降低了系统的耦合度
  • 代理对象在客户端和目标对象之间起到一个中介的作用,这样可以起到对目标对象的保护。代
  • 理对象可以在对目标对象发出请求之前进行一个额外的操作,例如: 权限检查等

缺点

  • 由于在客户端和真实主题之间增加了一个代理对象,所以会造成请求的处理速度变慢
  • 实现代理类也需要额外的工作,从而增加了系统的实现复杂度
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月15日 0

暂无评论

推荐阅读
  8Tw5Riv1mGFK   16天前   26   0   0 C++
  BYaHC1OPAeY4   9天前   28   0   0 C++
  3dygdw7fVgD7   21天前   22   0   0 C++
  oBaV3jusLkh1   19天前   26   0   0 C++
  nmX9dIiR6BtA   19天前   27   0   0 C++
  yZdUbUDB8h5t   12天前   19   0   0 C++
AWwQJA71Um8k