`

C++设计模式之代理

阅读更多
C++设计模式之代理

废话少说,先奉上代码:
#include "stdafx.h"
#include <iostream>
using namespace std;
class IKindwomen
{
public:
	
IKindwomen(void);
	
~IKindwomen(void);
	
virtual void makeEyesWithMan();
	
virtual void tlaWithMan();
};
class WangPo{
public:
	
WangPo(IKindwomen * pKindwomen);
	
~WangPo();
	
void makeEyesWithMan();
	
void tlaWithMan();
private:
	
IKindwomen * pKindwomen;
};
class PanJianLian:public IKindwomen{
public:
	
PanJianLian();
	
~PanJianLian();
	
virtual void makeEyesWithMan();
	
virtual void tlaWithMan();
};
class JiaShi:public IKindwomen{
public:
	
JiaShi();
	
~JiaShi();
	
virtual void makeEyesWithMan();
	
virtual void tlaWithMan();
};
WangPo::WangPo(IKindwomen * pKindwomen){
	
this->pKindwomen = pKindwomen;
}
WangPo::~WangPo(){
	
delete this->pKindwomen;
}
void WangPo::makeEyesWithMan(){
	
this->pKindwomen->makeEyesWithMan();
}
void WangPo::tlaWithMan(){
	
this->pKindwomen->tlaWithMan();
}

PanJianLian::PanJianLian(){}
PanJianLian::~PanJianLian(){}
void PanJianLian::makeEyesWithMan(){
	
cout<<"潘金莲抛媚眼!"<<endl;
}
void PanJianLian::tlaWithMan(){
	
cout<<"潘金莲谈恋爱!"<<endl;
}
JiaShi::JiaShi(){}
JiaShi::~JiaShi(){}
void JiaShi::makeEyesWithMan(){
	
cout<<"贾氏抛媚眼!"<<endl;
}
void JiaShi::tlaWithMan(){
	
cout<<"贾氏谈恋爱!"<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
	
WangPo* wangPo = new WangPo(new PanJianLian());
	
wangPo->makeEyesWithMan();
	
wangPo->tlaWithMan();
	
delete wangPo;
	
return 0;
}

先说类的设计,首先定义一个IKindwomen 类,声明虚函数:makeEyesWithMan(),tlaWithMan(),下面的JiaShi和PanJianLian类分别继承自IKindwomen 类
各自实现了上述连个成员方法。其次WangPo类声明了makeEyesWithMan(),tlaWithMan()和一个IKindwomen类型的私有成员变量。

在下面的main函数调用中,我们发现在我们调用makeEyesWithMan(),tlaWithMan()方法的时候是通过WangPo类的实例调用的,并未通过JiaShi和PanJianLian类的实例调用,在WangPo类的构造函数中入参数的类型决定了makeEyesWithMan(),tlaWithMan()函数的具体调用细节。通过上述的设计,实现了代理之功效,巧妙的通过WangPo类来管理西门庆的妹子们。此为C++ 之代理模式简单实现,望各位多多指教。
分享到:
评论

相关推荐

    设计模式C++学习之代理模式(Proxy)

    设计模式C++学习之代理模式(Proxy)

    C++设计模式代理模式

    C++实现代理模式,隐藏了真实的对象并且可以扩展其他的非核心功能,还实现了强制代理

    C++设计模式之代理模式

    前言 青春总是那样,逝去了才开始回味...今天,我并不会去总结游戏代理是如何实现的,重点是通过游戏代理这个例子来总结设计模式中的代理模式。 什么是代理模式? 在GOF的《设计模式:可复用面向对象软件的基础》一书中

    设计模式-C++

    结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...

    C++设计模式之代理模式(Proxy)

    代理模式是一种程序设计最为重要的一种模式,其具体的使用非常广泛,根据它的作用,其实我们可以直接理解为中间件或者中间层,比如各类软件的中间件,软件与硬件中的中间层。 作用 为其他对象提供一种代理以控制对...

    c++设计模式-结构型模式-代理模式

    c++设计模式-结构型模式-代理模式,qt工程,c++源码,简单示例

    C++设计模式(Design Pattern)范例源代码

    23种设计模式(Design Pattern)的C++实现范例,包括下面列出的各种模式,代码包含较详细注释。另外附上“设计模式迷你手册.chm” 供参考。 注:项目在 VS2008 下使用。 创建型: 抽象工厂模式(Abstract Factory) ...

    设计模式--C++

    1.1 什么是设计模式 2 1.2 Smalltalk MVC 中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...

    代理模式 C++实现

    代理模式(Proxy) 定义: 为其他对象提供一种代理以控制对这个对象的访问 结构: 由三部分组成 1.RealSubject(真实对象): 真正会调用到的对象 2.Proxy(代理对象): 代理真实对象的地方 3.Subject(共同点): 代理对象...

    设计模式专题之(六)代理模式---设计模式代理模式示例代码(python--c++)

    设计模式专题之(六)代理模式---设计模式代理模式示例代码(python--c++)

    C++设计模式

    (四)代理模式 9 (五)工厂方法模式 11 (六)原型模式 13 (七)模板方法模式 15 迪米特法则 16 (八)外观模式 16 (九)建造者模式(生成器模式) 19 (十)观察者模式 23 (十一)抽象工厂模式 28 (十二)...

    C++设计模式课件15_Proxy_代理模式.pdf

    C++设计模式课件15_Proxy_代理模式.pdf

    C++设计模式代码

    用C++重写了Head Fisrt设计模式这本书里的15个设计模式,除代理模式和复合模式。所有代码在VS2008下编译调式。如果你安装了VS2008可以直接打开,如果是其他编译器,可以拷出源代码重新编译。其中还包含了两个类图...

    C++ 代理模式实例

    代理模式: 为其他对象提供一种代理以控制对这个对象的访问。 代理模式的主要作用是,用来控制真实对象的访问权限,也就是完全对外隐藏真实对象。以及在调用真实对象时,代理还可以额外的处理另外的事。 比如下面...

    c++设计模式实现

    使用C++实现常用的设计模式,可作为学习参考 简单工厂,策略,装饰,代理,工厂方法,观察者,建造者,外观,原型等

    《C++20设计模式》学习笔记-第12章代理模式-配套代码

    《C++20设计模式》学习笔记-第12章代理模式-配套代码

    GOLF设计模式(C++语言版)

    1.1 什么是设计模式 2 1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 ...

    设计模式迷你手册.chm

    设计模式迷你手册.chm,大小仅 188 KB,图文并茂,介绍性强,每个设计模式附有 C++、C# 示例源码示例。 目录: 创建型 Factory Method Abstract Factory Builder Prototype Singleton 结构型 Adapter Bridge ...

    C++设计模式之Proxy模式(代理模式)详解

    代理模式很容易理解,就是代替别人去做某一件事,打个比方,我们需要买水果,一般是去超市或者水果店买水果,很少有人去果园买水果,果园是生产水果的地方,但很少出售水果,在这里,水果店,超市就成了代理。...

Global site tag (gtag.js) - Google Analytics