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

207 阅读1分钟

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

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

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



  • #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所有 blog.csdn.net/Aidam_Bo/ar…