ITPub博客

首页 > 架构设计 > 设计模式 > C++设计模式之Proxy模式(代理模式)

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

设计模式 作者:传智黑马 时间:2019-07-26 16:47:47 0 删除 编辑

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

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

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



  • #pragma once



  • class CSellFruits//定义一个抽象类



  • {



  • public :



  •         CSellFruits( void );



  •          virtual  ~CSellFruits( void );



  •         virtual void sellapple()= //定义接口,卖苹果



  •         virtual void sellorange()= ; //定义接口,卖橘子



  • };







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


来自 “ ITPUB博客 ” ,链接:/69915785/viewspace-2651899/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-05-10

  • 博文量
    26
  • 访问量
    9367