代理模式很容易理解,就是代替别人去做某一件事,打个比方,我们需要买水果,一般是去超市或者水果店买水果,很少有人去果园买水果,果园是生产水果的地方,但很少出售水果,在这里,水果店,超市就成了代理。
首先定义一个抽象类,提供所有的函数接口。
定义卖水果的抽象类,也就是接口,果园与超市都要继承这个类。
-
#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博客 ” ,链接:https://blog.itpub.net/69915785/viewspace-2651899/
,如需转载,请注明出处,否则将追究法律责任。