当前位置: 首页 > news >正文

代理模式(大话设计模式)C/C++版本

代理模式

在这里插入图片描述

C++

#include <iostream>
using namespace std;class Subject // Subject 定义了RealSubject和Proxy的共用接口..这样就在任何使用RealSubject的地方都可以使用Proxy
{
public:virtual void func(){cout << "Subject" << endl;}
};class RealSubject : public Subject // RealSubject  定义proxy所代表的真实实体
{
public:virtual void func(){cout << "RealSubject" << endl;}
};class Proxy : public Subject // proxy 保存一个引用使得代理可以访问实体,并且提供一个于Subject的接口相同的接口 这样代理就可以用来替代实体
{RealSubject real;public:virtual void func(){cout << "Proxy" << endl;real.func();}
};int main()
{Proxy proxy;proxy.func();return 0;
}

C

#include <stdio.h>typedef void (*FuncPtr)(void);typedef struct
{FuncPtr func;
} Subject;typedef struct
{Subject subject;
} RealSubject;void RealSubject_init(RealSubject *self);
void RealSubject_func(void);typedef struct
{Subject subject;RealSubject real;
} Proxy;void Proxy_init(Proxy *self);
void Proxy_func(Proxy *self);int main()
{Proxy proxy;Proxy_init(&proxy);proxy.subject.func();return 0;
}void RealSubject_init(RealSubject *self)
{self->subject.func = RealSubject_func;
}void RealSubject_func(void)
{printf("RealSubject\n");
}void Proxy_init(Proxy *self)
{RealSubject_init(&self->real);self->subject.func = (FuncPtr)Proxy_func;
}void Proxy_func(Proxy *self)
{printf("Proxy\n");self->real.subject.func();
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SQL注入安全漏洞与防御策略
  • 展望未来:在【PyCharm】中结合【机器学习】实现高效的图形化处理
  • STM32之六:SysTick系统滴答定时器
  • Jenkins中Node节点与构建任务
  • 32路串口服务器 应用领域
  • ISO 45001:提升职业健康与安全管理水平的关键
  • MAC通过SSH连接VirtualBox中的虚拟机
  • 整洁架构SOLID-里氏替换原则(LSP)
  • MySQL表的内连和外连(重点)
  • Java 如何不用再每次新建线程,直接使用公共线程池
  • IoTDB 集群高效管理:一键启停功能介绍
  • 数据结构——排序算法(冒泡、快速、选择、插入)
  • Qt中使用RapidJSON
  • Gitea 仓库事件触发Jenkins远程构建
  • 从零编写一个神经网络完成手写数字的识别分类(pytorch实现)
  • Angular4 模板式表单用法以及验证
  • HashMap剖析之内部结构
  • HTML5新特性总结
  • JS实现简单的MVC模式开发小游戏
  • Linux后台研发超实用命令总结
  • mysql 数据库四种事务隔离级别
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Puppeteer:浏览器控制器
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • session共享问题解决方案
  • Spark学习笔记之相关记录
  • Travix是如何部署应用程序到Kubernetes上的
  • ViewService——一种保证客户端与服务端同步的方法
  • 理解在java “”i=i++;”所发生的事情
  • 批量截取pdf文件
  • 使用权重正则化较少模型过拟合
  • 一些css基础学习笔记
  • ​​​【收录 Hello 算法】9.4 小结
  • #pragma once
  • %@ page import=%的用法
  • (04)odoo视图操作
  • (1)(1.9) MSP (version 4.2)
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (33)STM32——485实验笔记
  • (4) PIVOT 和 UPIVOT 的使用
  • (9)STL算法之逆转旋转
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (五)activiti-modeler 编辑器初步优化
  • (一)SpringBoot3---尚硅谷总结
  • (原创)可支持最大高度的NestedScrollView
  • (转)创业家杂志:UCWEB天使第一步
  • (转)德国人的记事本
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • ..回顾17,展望18
  • .NET 材料检测系统崩溃分析