C++設計模式之Proxy模式(代理模式)

傳智黑馬發表於2019-07-26

代理模式很容易理解,就是代替別人去做某一件事,打個比方,我們需要買水果,一般是去超市或者水果店買水果,很少有人去果園買水果,果園是生產水果的地方,但很少出售水果,在這裡,水果店,超市就成了代理。

首先定義一個抽象類,提供所有的函式介面。

定義賣水果的抽象類,也就是介面,果園與超市都要繼承這個類。



  • #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部落格 ” ,連結:http://blog.itpub.net/69915785/viewspace-2651899/,如需轉載,請註明出處,否則將追究法律責任。

相關文章