设计模式——代理模式
(1)目的:为其它对象提供一种代理以控制对这个对象地访问。
(2)如何实现:
1.定义一个抽象类(Subject)提供一系列虚函数接口,定义一个类(RealSubject)继承于抽象类,内部重写实现(Subject)中的接口,定义一个代理类(Proxy)继承于抽象类(Subject),内部包含一个RealSubjet的成员变量。
2.代理类(Proxy)中重写的抽象类的接口实际上是调用RealSubjet的成员变量的成员函数。
(3)优点:
1.远程代理,为对象在不同地址空间提供局部代表
2.安全代理,可以增加访问控制
3.虚拟代理,当创建开销很大的对象时,用它来存放实例化需要很长时间的真实对象。
代码结构:
│ give_gifts.cpp
│ give_gifts.h
│ ProxyModel.cpp
│ proxy_man.cpp
│ proxy_man.h
│ real_persuer.cpp
│ real_persuer.h
give_gifts.h(Subject)
#ifndef GIVE_GIFTS_H
#define GIVE_GIFTS_H
class GiveGifts
{
public:
void virtual GiveFlower() = 0;
void virtual GiveMoney() = 0;
void virtual Treat() = 0;
};
#endif
give_gifts.cpp
#include "give_gifts.h"
real_persuer.h(RealSubject)
#include<string>
#include "give_gifts.h"
class RealPersuer :
public GiveGifts
{
private:
std::string goddess;
public:
RealPersuer(std::string);
void GiveFlower() override;
void GiveMoney() override;
void Treat() override;
};
real_persuer.cpp
void RealPersuer::GiveFlower()
{
std::cout << "送花给" << goddess << std::endl;
}
void RealPersuer::GiveMoney()
{
std::cout << "给" << goddess << "钱花"<<std::endl;
}
void RealPersuer::Treat()
{
std::cout << "请" << goddess << "吃饭"<<std::endl;
}
proxy_man.h(Proxy)
#pragma once
#include<string>
#include "give_gifts.h"
#include "real_persuer.h"
class ProxyMan :
public GiveGifts
{
private:
RealPersuer* poor_boy;
public:
ProxyMan(std::string);
void GiveFlower() override;
void GiveMoney() override;
void Treat() override;
};
proxy_man.cpp
#include "proxy_man.h"
ProxyMan::ProxyMan(std::string girl_name)
{
poor_boy=new RealPersuer(girl_name);
}
void ProxyMan::GiveFlower()
{
poor_boy->GiveFlower();
}
void ProxyMan::GiveMoney()
{
poor_boy->GiveMoney();
}
void ProxyMan::Treat()
{
poor_boy->Treat();
}
ProxyModel.cpp
#include <iostream>
#include "proxy_man.h"
int main()
{
ProxyMan* laborer = new ProxyMan("小美");
laborer->GiveFlower();
laborer->GiveMoney();
laborer->Treat();
}
————————————————
版权声明:本文为CSDN博主「锤锤咕咕」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chuichuigugu/article/details/126692142