用C++跟你聊聊“代理模式”
时间:2022-07-23
本文章向大家介绍用C++跟你聊聊“代理模式”,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
帮兄弟追小姑娘的故事
弄这个模式的时候啊,这心里多多少少还是有点蓝瘦。以前不懂事儿,看上哪个姑娘,自己还不敢说,总是让身边的朋友来“代理”。 反正最后也没成。
那这么个“代理”是怎么回事呢?比方说,我买个东西,然后朋友帮我送过去;有些啥不好意思说的话,然后朋友帮我说;有时候想约人家出来玩,还是朋友来“代理一下”吧,不敢哈哈。
最后怎么样呢?我喜欢人家,人家不知道,反正啥事儿都是“代理”在干。
放在设计模式中,还真有个模式,叫“代理模式”。不过人家这个“代理模式”,可不是因为羞涩,而是有些事情,本尊不方便出面,只能请“代理”了。
放眼生活中,这个中间商赚差价是吧、这个私家侦探抓小四是吧、这个跳大神是吧,这些都是“代理模式”。
如何当好一名出色的“代理”
首先,一名合格的代理,要原滋原味的转述业主的需求,这个简单,直接调用业主的类方法就好了。 其次,一名优秀的代理,要保护好业主的个人信息,保证目标对象不发现这个业主。 然后,这个代理要确实搞笑,不对,高效。不然要这个代理干嘛?自己来不就爱好了。
如果有看过这篇:依赖倒转原则,那我们就来看看类图:
和代理一起追小女生的代码实现
#include<iostream>
#include<string>
using namespace std;
//代理接口
class GiveGift
{
virtual void GiftFlowers() = 0;
// virtual void GiftFilm() = 0;
virtual void GiftDinner() = 0;
};
//被追求的小姑娘
class girl
{
public:
string name;
public:
girl() {}
void Name(string str) { name = str; }
};
//追求者
class pursuit :public GiveGift
{
girl* a;
public:
pursuit(girl *k) { a = k; }
void GiftFlowers() { cout << a->name<<", 送你花花" << endl; }
// void GiftFile() { cout<<a->name << ",勤看电影"<<endl; }
void GiftDinner() { cout<<a->name << ",一起吃个晚饭吗?" << endl; }
};
class proxy :public GiveGift
{
pursuit* pur;
public:
proxy(girl* a) { pur = new pursuit(a); }
void GiftFlowers() { pur->GiftFlowers(); }
void GiftDinner() { pur->GiftDinner(); }
};
int main()
{
girl* b = new girl();
b->Name("啊钒");
proxy* p = new proxy(b);
p->GiftDinner();
p->GiftFlowers();
return 0;
}
代理模式应用场景
①远程代理:为一个对象在不同的地址提供不同的代表,这样可以隐藏一个对象存在于不同地址空间的事实。比方说:XXX公司亚洲区总代理。
②虚拟代理:根据需要创建开销很大的对象,通过它来存放初始化时间很长的真实对象。
③安全代理:用于控制真实对象访问时的权限。
④智能指引:调用真实对象时,代理处理另外一些事情。
代理模式其实就是在访问对象时认为的加入一些中间过程,而这些中间过程,就可以大有文章。
- go语言map字典删除操作的方法
- 深入Go语言网络库的基础实现
- Java多线程和并发基础面试问答
- easyui事件和方法的使用方法
- go语言实现通过FTP库自动上传web日志
- Go语言实现顺序存储的线性表实例
- hashpartitioner-Spark分区计算器
- Could not find artifact com.sun:tools:jar:1.5.0
- Java面试官最爱的volatile关键字
- Golang实现带优先级的channel
- java在指定目录下执行dos命令或者bat文件
- 搭建本地 golang 文档服务器
- 浅析Java中的final关键字
- 大话企业级android读书笔记(一)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python自动化操作实现图例绘制
- ThinkPHP5.0框架使用build 自动生成模块操作示例
- PHP远程连接oracle数据库操作实现方法图文详解
- 微信公众平台开发教程②微信端分享功能图文详解
- 微信公众平台开发教程⑥ 微信开发集成类的使用图文详解
- keras分类之二分类实例(Cat and dog)
- 详解Python 循环嵌套
- PHP中quotemeta()函数的用法讲解
- 微信公众号实现扫码获取微信用户信息(网页授权)
- 实例说明js脚本语言和php脚本语言的区别
- 在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
- PHP7匿名类的用法示例
- laravel配置Redis多个库的实现方法
- PHP中Static(静态)关键字功能与用法实例分析
- 详解PHP 二维数组排序保持键名不变