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

首先定义一个抽象类,提供所有的函数接口。

定义卖水果的抽象类,也就是接口,果园与超市都要继承这个类。

#pragma once
class CSellFruits//定义一个抽象类
{
public:CSellFruits(void);virtual ~CSellFruits(void);virtual void sellapple()=0; //定义接口,卖苹果virtual void sellorange()=0;//定义接口,卖橘子
};#include "SellFruits.h"
CSellFruits::CSellFruits(void)
{
}CSellFruits::~CSellFruits(void)
{
}

2.定义具体类,也就是果园类,果园生产水果,但是一般不买水果

#pragma once
#include "sellfruits.h"
#include <stdio.h>
class COrchard :public CSellFruits
{
public:COrchard(void);virtual ~COrchard(void);virtual void sellapple();virtual void sellorange();
};#include "Orchard.h"
COrchard::COrchard(void)
{
}COrchard::~COrchard(void)
{
}void COrchard::sellapple()
{printf("Sell apple\n");
}void COrchard::sellorange()
{printf("Sell orange\n");
}

3.定义代理类,代理卖水果的类

#pragma once
#include "sellfruits.h"
#include "Orchard.h"
#include <stdio.h>
class CProcySellFruits :public CSellFruits
{
public:CProcySellFruits(void);virtual ~CProcySellFruits(void);virtual void sellapple();virtual void sellorange();
private:CSellFruits *p_SellFruits; //传入接口对象
};#include "ProcySellFruits.h"
CProcySellFruits::CProcySellFruits(void):p_SellFruits(NULL)
{
}CProcySellFruits::~CProcySellFruits(void)
{
}void CProcySellFruits::sellapple()
{if(this->p_SellFruits==NULL){this->p_SellFruits=new COrchard(); //用被代理的类实例化}this->p_SellFruits->sellapple();//代理果园卖苹果
}void CProcySellFruits::sellorange()
{if(this->p_SellFruits==NULL){this->p_SellFruits=new COrchard(); //用被代理的类实例化}this->p_SellFruits->sellorange();//代理果园卖橘子
}

4.实际调用

 CProxySellFruits* p=new CProxySellFruits(); //用代理类卖水果p->SellApple();p->SellOrange();

C++设计模式之Proxy模式(代理模式)相关推荐

  1. Java设计模式(10)代理模式(Proxy模式)

    理解并使用设计模式,能够培养我们良好的面向对象编程习惯,同时在实际应用中,可以如鱼得水,享受游刃有余的乐趣. Proxy是比较有用途的一种模式,而且变种较多,应用场合覆盖从小结构到整个系统的大结构,P ...

  2. 设计模式(四)--代理模式

    设计模式(四)–代理模式 文章目录 设计模式(四)--代理模式 其他链接 代理模式 1.简介 2.静态代理 角色 代码实现 好处 3.动态代理 代码实现 解析 其他链接 JVM学习笔记(一) JVM学 ...

  3. 设计模式之----Java动态代理模式

    在Spring中,有很多设计模式被应用,其中不乏代理模式.而代码模式中,就一定少不了动态代理模式.今天就对动态代理模式进行学习记录. 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托 ...

  4. C++设计模式 | 四种结构型模式——代理模式、外观模式、适配器模式、装饰模式...

    结构型模式:让类和类进行组合,获得更大的结构. 代理模式 代理模式的定义: 为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端 ...

  5. 《拉勾Java高薪课程》阶段一输出 之 通过房屋租赁流程理解设计模式(单例模式,代理模式,工厂模式)--菜鸟小回

    通过房屋租赁流程理解设计模式(单例模式,代理模式,工厂模式) 文章目录 通过房屋租赁流程理解设计模式(单例模式,代理模式,工厂模式) @[toc] 一.单例模式 1. 相关概念 2. 演示思路 3. ...

  6. 设计模式 — 结构型模式 — 代理模式

    目录 文章目录 目录 代理模式 应用场景 代码示例 代理模式 代理模式,为其他对象提供一种代理,以此控制一个对象的访问方式.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户 ...

  7. 【设计模式与体系结构】代理模式

    [设计模式与体系结构]代理模式 文章目录 [设计模式与体系结构]代理模式 一.实例分析 二.代码实现 三.实现结果 一.实例分析 (1) 代理模式设计一个房产中介的模拟程序. 要求:房产中介有介绍和代 ...

  8. 小白都能懂的设计模式 java版 静态代理模式实战练习(超详细)

    静态代理: 角色分析: 抽象角色:一般使用接口或者是抽象类来解决 真实角色:被代理的角色 代理角色:代理真实角色,代理真实角色后,我们一般会做一些附属操作 客户:访问代理对象的人 以一个租房子的例子来 ...

  9. 设计模式学习之1—代理模式

    设计模式学习之1-代理模式 0.?先看这里 --- 诗雨的学习说明 1.从生活中初识代理 2.代理模式的类图和角色 3.静态代理和动态代理 4.静态代理 和 动态代理 的 使用模板 4.1 静态代理使 ...

  10. 设计模式笔记15:代理模式(Proxy Pattern)

    一.代理模式的内容        代理模式为另一个对象提供一个替身或占位符以访问这个对象.         给某一个对象提供一个代理,并由代理对象控制对原对象的引用.代理模式的英文叫做Proxy或Su ...

最新文章

  1. ipvsadm的几个参数输出的说明
  2. 基于Springboot实现作业管理系统
  3. C++函数调用方式(_stdcall, _pascal, _cdecl...)总结 收藏
  4. 用python排序算法_Python - 八大排序算法
  5. 2年6个月11天,外包到阿里的修仙之路
  6. C#编程基础(简单概述与理解)
  7. 使用 anacoda 安装scrapy
  8. 防火墙放开oracle远程,oracleMTS模式下防火墙如何开通
  9. 山西毕业主题研学夏令营
  10. mysql查询表升序降序_创建一个按钮,对MYSQL查询进行升序和降序排序
  11. 高举5G和AI两面旗帜:紫光展锐市场峰会火爆申城
  12. 使用onlyoffice让你轻松实现word、ppt、excel在线编辑功能
  13. 通过swoole扩展,实现简单的匿名聊天室功能
  14. Android Studio安装和使用教程(全文图解)
  15. 2017滴滴校招 末尾0的个数(数学知识)
  16. Windows 7 SATA与XP IDE双启动多个磁盘
  17. elementUI checkbox选中回显操作注意事项
  18. Java中关于length和length()的问题小结
  19. eclipse在资源管理器中打开文件
  20. 编程基础——鱼龙混杂来三波

热门文章

  1. jbutton可以设置id吗_Java Swing简单控件实例(JButton,JLabel,JMenuBar,JComboBo)
  2. python dlib opencv人脸识别准确度_基于dlib和opencv库的人脸识别
  3. 2.JAVA基础——数据类型、变量及运算符
  4. pytorch 入门学习 实现线性回归-5
  5. apache2.4 php5.5 配置,求助,apache2.4+php5.5,配置好不能运行,错误信息如下
  6. matlab头模型图像,用Matlab解《2013年数据建模比赛》图像碎片拼接题
  7. Leetcode刷题指南和top100题目
  8. git统计每个人的代码行数_程序员实用工具,推荐一款代码统计神器GitStats
  9. 2019-03-13
  10. .NET Core 3.0带来桌面支持(Windows Only)