设计模式——代理模式

设计模式——代理模式

(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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值