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

本文通过一个生动的水果销售场景,深入浅出地介绍了代理模式的概念及其应用。代理模式是一种设计模式,它允许程序员在不直接引用对象的情况下操作对象,从而降低了系统的耦合度。文中详细展示了如何使用C++实现一个简单的代理模式,包括定义抽象卖水果类、具体果园类以及代理卖水果类,最后通过实际调用展示代理模式的工作流程。

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

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

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



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

     



版权声明:最终版权归YBAidam所有        https://blog.youkuaiyun.com/Aidam_Bo/article/details/81116034
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值