设计模式C++学习笔记之二(Proxy代理模式)
来源:互联网 发布:985 211文件失效 知乎 编辑:程序博客网 时间:2024/06/06 10:40
c++设计模式总结,出处见 点击打开链接
代理,一看名字就知道这只是个中介而已,真实的执行者在代理的后面呢。cbf4life在他的书里提的例子也很有趣,更详细的内容及说明可以参考原作者博客:cbf4life.cnblogs.com。现在贴代码,以方便随用随取。
2.1.解释
main(),西门庆
IKindWomen,接口
CWangPo,代理
CPanJinLian,实际执行者之一
CJiaShi,实际执行者之二
说明:代理和实际执行者派生于共同的接口,代理拥有实际执行者的实例。代理的每一个函数(接口的实现函数),直接调用实际执行者的对应接口函数。
注意:代理只是简单的装载,然后调用实际执行者的函数。
看代码:
//IKindWomen.h#pragma onceclass IKindWomen{public: IKindWomen(void); virtual ~IKindWomen(void); virtual void MakeEyesWithMan() = 0; virtual void HappyWithMan() = 0;};//WangPo.h#pragma once#include "ikindwomen.h"class CWangPo : public IKindWomen{public: CWangPo(IKindWomen *pKindWomen); ~CWangPo(void); void HappyWithMan(void); void MakeEyesWithMan(void);private: IKindWomen *m_pKindWomen;};//WangPo.cpp#include "StdAfx.h"#include "WangPo.h"CWangPo::CWangPo(IKindWomen *pKindWomen){ this->m_pKindWomen = pKindWomen;}CWangPo::~CWangPo(void){ delete this->m_pKindWomen;}void CWangPo::HappyWithMan(){ this->m_pKindWomen->HappyWithMan();}void CWangPo::MakeEyesWithMan(void){ this->m_pKindWomen->MakeEyesWithMan();}//PanJinLian.h#pragma once#include "ikindwomen.h"class CPanJinLian : public IKindWomen{public: CPanJinLian(void); ~CPanJinLian(void); void HappyWithMan(void); void MakeEyesWithMan(void);};//PanJinLian.cpp#include "StdAfx.h"#include "PanJinLian.h"#include <iostream>using std::cout;using std::endl;CPanJinLian::CPanJinLian(void){}CPanJinLian::~CPanJinLian(void){}void CPanJinLian::HappyWithMan(void){ cout << " 潘金莲和男人做那个... ... " << endl;}void CPanJinLian::MakeEyesWithMan(void){ cout << " 潘金莲抛媚眼 " << endl;}//JiaShi.h#pragma once#include "ikindwomen.h"class CJiaShi : public IKindWomen{public: CJiaShi(void); ~CJiaShi(void); void HappyWithMan(void); void MakeEyesWithMan(void);};//JiaShi.cpp#include "StdAfx.h"#include "JiaShi.h"#include <iostream>using std::cout;using std::endl;CJiaShi::CJiaShi(void){}CJiaShi::~CJiaShi(void){}void CJiaShi::HappyWithMan(void){ cout << " 贾氏和男人做那个... ... " << endl;}void CJiaShi::MakeEyesWithMan(void){ cout << " 贾氏抛媚眼 " << endl;}//Proxy.cpp#include "stdafx.h"#include "WangPo.h"#include "PanJinLian.h"#include "JiaShi.h"#include <iostream>using std::cout;using std::endl;void DoPanJinLian(){ CWangPo *pWangPo; // 西门庆想找潘金莲,让王婆来安排。 pWangPo = new CWangPo(new CPanJinLian()); pWangPo->MakeEyesWithMan(); pWangPo->HappyWithMan(); delete pWangPo;}void DoJiaShi(){ CWangPo *pWangPo; // 西门庆想找贾氏,让王婆来安排。 pWangPo = new CWangPo(new CJiaShi()); pWangPo->MakeEyesWithMan(); pWangPo->HappyWithMan(); delete pWangPo;}int _tmain(int argc, _TCHAR* argv[]){ // 西门庆想找潘金莲 DoPanJinLian(); // 西门庆想找贾氏 DoJiaShi(); _CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF); _CrtDumpMemoryLeaks(); system("pause"); return 0;}
看起来代理模式的结构和策略模式类似,都是由一个类来装载接口的一个实例,策略模式是CContext来装载,代理模式是CWangPo来装载。CContext不是从IStrategy派生,所以不需要实现IStrategy接口函数,而CWangPo是从IKindWomen派生的所以CWangPo很清楚CPanJinLian和CJiaShi的接口函数。这就是代理,代理人知道被代理人能干的事情即函数,所以代理人可以成为中介。
代理模式可以很好的将前后端分开,实现了松散耦合。代理模式属于结构型模式。上图仍然是例子中用到的类相关图,并不是代理模式的抽象类图。这样的类图更容易理解代理模式。抽象类图当然具有更高的抽象层次,但不利于理解。
阅读全文
0 0
- 设计模式C++学习笔记之二(Proxy代理模式)
- 设计模式C++学习笔记之二(Proxy代理模式)
- 设计模式C++学习笔记之二(Proxy代理模式)
- 设计模式C++学习笔记之二(Proxy代理模式)
- 设计模式C++学习笔记之二(Proxy代理模式)
- 设计模式C++学习笔记之二(Proxy代理模式)
- 设计模式C++学习笔记之二(Proxy代理模式)
- 设计模式C++学习笔记之二(Proxy代理模式)
- 设计模式C++学习笔记之二(Proxy代理模式)
- 设计模式C++学习笔记之二(Proxy代理模式)
- 设计模式C++学习笔记之二(Proxy代理模式)
- 设计模式C++学习笔记之二(Proxy代理模式)
- 设计模式C++学习笔记之二(Proxy代理模式)
- [设计模式学习笔记]PROXY(代理)
- 设计模式学习笔记(五)之代理模式(Proxy)
- 设计模式学习笔记--代理(Proxy)模式
- 设计模式C++之二(Proxy代理模式)
- 设计模式之(二)---代理模式Proxy Pattern
- #Java 核心技术卷一阅读笔记# 第十二章 Swing用户界面组件
- 实验二之静态链表
- 相对、绝对、固定定位,以及其层级关系和脱离文档流的影响
- asp.net如何使文本对齐方式为剧中
- 【UNP学习笔记】套接字地址相关函数
- 设计模式C++学习笔记之二(Proxy代理模式)
- [Java]从今天开始,每天记录一点点
- win64 python安装PIL出错
- java基本数据类型和数组
- ubuntu16.04用root用户登陆图形界面
- Go游戏服务器开发的一些思考(十六):IO游戏服务器架构
- python基础学习第一天
- WAMP下Phalcon和Phalcon Developer Tools的安装
- java语言程序设计基础 第十一章 继承11.2