博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
016 设计模式之代理模式
阅读量:7127 次
发布时间:2019-06-28

本文共 2506 字,大约阅读时间需要 8 分钟。

组成:

抽象角色:通过接口或抽象类声明真实角色实现的业务方法。

代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。

真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。

 

一个是真正的你要访问的对象(目标类),一个是代理对象,真正对象与代理

对象实现同一个接口,先访问代理类再访问真正要访问的对象。

代理模式分为静态代理、动态代理。

静态代理是由程序员创建或工具生成代理类的源码,再编译代理类。所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。

动态代理是在实现阶段不用关心代理类,而在运行阶段才指定哪一个对象。

 

#pragma once

#include "stdafx.h"

class IKindWomen

{
public:
IKindWomen(void) {}
virtual ~IKindWomen(void) {}
virtual void MakeEyesWithMan() = 0;
virtual void HappyWithMan() = 0;
};

 

#pragma once

#include "IStrategy.h"

class CWangPo : public IKindWomen

{
public:
CWangPo(IKindWomen *pKindWomen);
~CWangPo();
void HappyWithMan();
void MakeEyesWithMan();
private:
IKindWomen * m_pKindWomen;
};

 

#include "StdAfx.h"

#include "oneWay.h"

CWangPo::CWangPo(IKindWomen *pKindWomen)

{
this->m_pKindWomen = pKindWomen;
}

CWangPo::~CWangPo()

{
delete this->m_pKindWomen;
}

void CWangPo::HappyWithMan()

{
this->m_pKindWomen->HappyWithMan();
}

void CWangPo::MakeEyesWithMan(void)

{
this->m_pKindWomen->MakeEyesWithMan();
}

#pragma once

#include "IStrategy.h"

class CPanJinLian:public IKindWomen

{
public:
CPanJinLian();
~CPanJinLian();
void HappyWithMan();
void MakeEyesWithMan();
};

 

#include "StdAfx.h"

#include "TwoWay.h"
#include <iostream>

CPanJinLian::CPanJinLian()

{
}

CPanJinLian::~CPanJinLian()

{
}

void CPanJinLian::HappyWithMan()

{
std::cout << " 潘金莲和男人... ... " << std::endl;
}

void CPanJinLian::MakeEyesWithMan()

{
std::cout << " 潘金莲抛媚眼 " << std::endl;
}

 

#pragma once

#include "IStrategy.h"

class CJiaShi :public IKindWomen

{
public:
CJiaShi();
~CJiaShi();
void HappyWithMan();
void MakeEyesWithMan();
};

 

#include "StdAfx.h"

#include "ThreeWay.h"
#include <iostream>

CJiaShi::CJiaShi()

{
}

CJiaShi::~CJiaShi()

{
}

void CJiaShi::HappyWithMan()

{
std::cout << " 贾氏和男人... ... " << std::endl;
}

void CJiaShi::MakeEyesWithMan()

{
std::cout << " 贾氏抛媚眼 " << std::endl;
}

 

#include "stdafx.h"

#include "IStrategy.h"
#include "OneWay.h"
#include "TwoWay.h"
#include "ThreeWay.h"
#include <iostream>

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();

system("pause");

return 0;
}

转载于:https://www.cnblogs.com/guojun/p/9829880.html

你可能感兴趣的文章
代码规范的重要性,我已经放弃治疗
查看>>
笨办法学C 练习30:自动化测试
查看>>
mui初级入门教程(五)— 聊聊即时通讯(IM),基于环信 web im SDK
查看>>
[vs2008]Visual Studio 2008 SP1添加或删除功能提示查找SQLSysClrTypes.msi文件
查看>>
JS 设计模式二(封装)
查看>>
JavaScript “跑马灯”抽奖活动代码解析与优化(一)
查看>>
为什么我们选择 segmentfault 写作?
查看>>
多模型融合推荐算法在达观数据的运用
查看>>
JDK 11 马上就要来了!JDK 12 还会远吗?
查看>>
Kali Linux 2019.1 发布,Metasploit 更新到 5.0 版本
查看>>
【mysql的设计与优化专题(1)】ER图,数据建模与数据字典
查看>>
Jibo’s Name: How did we pick it?
查看>>
device's media capture mechanism,利用input:file调用设备的照相机/相册、摄像机、录音机...
查看>>
BroadLink:三款新品力求无障碍人机交互,三大平台分三期对外开放 ...
查看>>
掌门1对1获3.5亿美元E-1轮融资,华人文化产业基金、中金甲子基金等投资 ...
查看>>
Unity中的通用对象池
查看>>
ORA-00600: internal error code, arguments: [16703], [1403], [28], [...
查看>>
忆芯科技发布新一代国产主控芯片STAR1000P!4月完成量产版本 ...
查看>>
如何用条码标签打印软件实现商品价签制定会员价 ...
查看>>
如何轻松实现个性化推荐系统
查看>>