IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++实现代码模式 -> 正文阅读

[C++知识库]C++实现代码模式

1 模式介绍

代理模式(Proxy Pattern):给某一个对象提供一个代理,并由代理对象控制对原对象的引用。

2 模式结构

(1)Subject(抽象主题角色):声明了真实主题和代理主题的共同接口,这样一来在任何使用真实主题的地方都可以使用代理主题,客户端通常需要针对抽象主题角色进行编程。
(2)Proxy(代理主题角色):代理主题角色通过关联关系引用真实主题角色,因此可以控制和操纵真实主题对象;代理主题角色中提供一个与真实主题角色相同的接口(以在需要时代替真实主题角色),同时还可以在调用对真实主题对象的操作之前或之后增加新的服务和功能;
(3)RealSubject(真实主题角色):定义了代理角色所代表的真实对象,在真实主题角色中实现了真实的业务操作,客户端可以通过代理主题角色间接调用真实主题角色中定义的操作。
?

3 模式优缺点

3.1 优点

(1)代理模式能够将客户与真正被调用的对象分离(协调调用者与被调用者),降低了耦合度;

(2)客户端可以通过代理与多个目标对象交互,目标对象的修改和扩展客户端并不感知,扩展性和维护性强

(3)各种代理模式:

远程代理:使得客户端可以访问在远程机上的对象,远程机可以具有更好的计算性能与处理速度,可以快速相应并处理客户端请求;

虚拟代理:可以使用一个小对象来代表一个大对象,可以减少系统资源的消耗,对系统进行优化并提高运行速度;

保护代理:可以控制对真实对象的使用权限;

3.2 缺点

(1)在客户端和真正目标对象之间增加代理对象,请求速度有可能会变慢;

(2)增加代理会使系统复杂度变高;

4 模式应用

(1)代理服务器,通过代理服务器访问无法访问的服务器;

(2)可以在代理服务器实现负载均衡、数据缓存;

常见的代理模式

(1)远程代理(Remote):为一个位于不同的地址空间的对象提供一个本地的代理对象,这个不同的地址空间可以是同一台主机中,也可以是在另一台主机中;

(2)虚拟代理(Virtual):如果需要创建一个资源消耗比较大的对象,先创建一个消耗相对较小的对象来表示,真实对象只有需要时才会被真正创建;

(3)保护代理(Protect or Access),控制对一个对象的访问,可以给不同的用户提供不同级别的使用权限。

其他的代理:缓冲代理、防火墙代理、同步化代理。

5 模式实现

#include<iostream>
using namespace std;
//抽象主题角色
class subject
{
public:
  virtual void Request()=0{}
};
 //真实主题角色
class Consubject:public subject
{
public:
 void Requset();//实现了在抽象主题角色中定义的方法
};
 
void Consubject::Request() //重载
 {
  cout<<"ConRequest"<<endl;
 }
 //代理主题角色
class Proxy
{
public:
 Proxy(){}
 Proxy(subject* sub){m_sub=sub;} //代理主题角色中定义了一个真实主题角色对象
 ~Proxy(){delete m_sub;}
 void Request()  //代理主题角色也实现了抽象主题角色的方法
 {
  cout<<"Proxy REQ"<<endl;
  m_sub->Request();//代理主题角色调用 真实角色的业务方法
 }
private:
 subject* m_sub;
};
 
void main()
{
 subject* sub=new Consubject();//真实主题角色对象
 Proxy* p=new Proxy(sub);//d定义代理主题对象
 p->Request();
}

参考文献:

【1】设计模式之代理模式(C++实现):设计模式之代理模式(C++实现)_墨1024-CSDN博客

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-16 12:52:35  更:2022-02-16 12:56:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:39:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码