C++ 代理模式(Proxy)

本文介绍了代理模式的概念及其在软件开发中的应用。代理模式为一个对象提供了一个代理,通过代理对象控制对原对象的引用,实现对目标对象的访问控制。文中还提供了一个C++示例,演示了如何使用代理模式来实现送礼过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。
可以详细控制访问某个类(对象)的方法,在调用这个方法前作的前置处理(统一的流程代码放到代理中处理)。调用这个方法后做后置处理。

优点:

通过一个代理对象完成一系列的处理,在将来的程序改动中,就会允许动态更改、添加、删除和重新定位对象,这使开发人员的发布变得透明,符合开闭原则。
代理模式能够协调调用者和被调用者,在一定程度上降低了系统的耦合度。
代理模式在架构中还可以让虚拟代理通过使用一个小对象来代表一个大对象,可以减少系统资源的消耗,对系统进行优化并提高运行速度。

缺点:

要求对服务描述进行标准化,我们要使用代理模式时则需要考虑异步处理机制、协议创建流程和错误环境控制,比较的繁琐。

使用场景

比如你有一个工厂开始是生产手机的,但是它现在不想自己生产了,它把自己的东西交给了一家代工厂富士康去生产
小王想追求小娟,但他不认识小娟。但他的朋友小林认识小娟,所以他通过让小林帮忙送礼物的方式追求小娟

代码如下:

#include <iostream>
#include <string>
#include <memory>
#include <map>

class belle
{
public:
	belle(std::string name) : m_name(name)
	{
	}
	const std::string &getname(void)
	{
			return m_name;
	}
private:
	std::string m_name;
};

class givegift
{
public:
	virtual void give_flowers(void) = 0;
	virtual void give_house(void) = 0;
};

class lady_killer : public givegift
{
public:
	lady_killer(belle xjj) : m_belle(xjj)
	{
	}
	void give_flowers(void)
	{
		std::cout << "give_flowers .." << std::endl;
	}
	void give_house(void)
	{
		std::cout << "give_house .." << std::endl;
	}
private:
	belle m_belle;
};

class proxy : public givegift
{
public:
    proxy(belle xjj)
    {
        m_lady_killer = new lady_killer(xjj);
    }

    virtual void give_flowers()
    {
        m_lady_killer->give_flowers();
    }

    virtual void give_house()
    {
        m_lady_killer->give_house();
    }
	
private:
    lady_killer* m_lady_killer;

};

int main()
{
	std::cout << "start-up .." << std::endl;
	
	belle bl("斯嘉丽");
	proxy px(bl);
	px.give_flowers();
	px.give_house();

	std::cout << "done .." << std::endl;
    return 0;
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值