设计模式_08 代理模式(含 UML图 和 C++代码)

news/2024/7/6 6:32:36 标签: 代理模式, 设计模式

设计模式_08 代理模式

  • 8 代理模式
    • 8.1 概述
    • 8.2 结构
    • 8.3 实现
      • 8.3.1 UML图
      • 8.3.2 代码
    • 8.4 优缺点
      • 8.4.1 优点
      • 8.4.2 缺点
    • 8.5 使用场景
      • 8.5.1 远程代理(RPC)
      • 8.5.2 防火墙代理(VPN)
      • 8.5.3 保护代理
  • return 设计模式概述;

8 代理模式

8.1 概述

由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时访问对象不适合或不能直接引用目标对象,代理对象作为中介。

8.2 结构

抽象主题类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。
代理主题类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。
代理类:提供了与真实主题相同的接口,其内部包含对真实主题的引用,可以访问、控制或扩展真实主题的功能。

8.3 实现

8.3.1 UML图

在这里插入图片描述

8.3.2 代码

#include<iostream>
using namespace std;

class MobilePhone {
public:
	virtual void sell() = 0;
};

class HuaweiPhone : public MobilePhone {
	void sell() {
		cout << "华为手机" << endl;
	}
};

class IPhone : public MobilePhone {
	void sell() {
		cout << "苹果手机" << endl;
	}
};

class MobilePhoneStore : public MobilePhone {
private:
	MobilePhone* phone = NULL;
public:
	void getPhone(MobilePhone* phone) {
		this->phone = phone;
	}
	void sell() {
		phone->sell();
	}
};

class Customer {
private:
	MobilePhoneStore* store = new MobilePhoneStore();
public:
	void buy(MobilePhone* phone) {
		store->getPhone(phone);
		phone->sell();
	}
};

int main() {
	Customer customer;
	customer.buy(new HuaweiPhone());
	customer.buy(new IPhone());
	return 0;
}

8.4 优缺点

8.4.1 优点

在客户端和目标对象之间起到了中介作用和保护目标对象的作用。
代理对象可扩展目标对象功能。
将客户端与目标对象分离,降低了耦合度。

8.4.2 缺点

增加了系统的复杂度。

8.5 使用场景

8.5.1 远程代理(RPC)

本地服务通过网络请求远程服务。为了实现本地到远程的通信,需要实现网络通信,处理其中可能出现异常。为了良好的代码设计和可维护性,将网络通信部分隐藏起来,只暴露给本地服务一个接口,通过该接口可访问远程服务提供的功能而不必关心通信细节。

8.5.2 防火墙代理(VPN)

将浏览器设置成使用代理功能时,防火墙将浏览器的请求传给互联网。当互联网返回响应时,代理服务器再把它转给浏览器。

8.5.3 保护代理

控制对一个对象的访问,对于不同用户提供不同访问权限。

return 设计模式概述;

返回设计模式概述


http://www.niftyadmin.cn/n/1367488.html

相关文章

设计模式_09 适配器模式(含 UML图 和 C++代码)

设计模式_09 适配器模式9 适配器模式9.1 概述9.2 结构9.3 实现9.3.1 类适配器模式实现9.3.1.1 UML图9.3.1.2 代码9.3.2 对象适配器模式实现9.3.2.1 UML图9.3.2.2 代码9.4 使用场景return 设计模式概述;9 适配器模式 9.1 概述 将一个类的接口转换成客户希望的另一个接口&#…

设计模式_10 装饰者模式(含 UML图 和 C++代码)

设计模式_10 装饰者模式10 装饰者模式10.1 概述10.2 功能10.3 实现10.3.1 UML图10.3.2 代码10.4 优点10.5 使用场景return 设计模式概述;10 装饰者模式 10.1 概述 在不改变现有对象结构的前提下&#xff0c;动态的给对象增加一些额外功能的模式。 10.2 功能 抽象构件角色&a…

基础算法_排序算法总结

基础算法_排序算法总结排序算法稳定性概念种类1 选择排序原理性能2 冒泡排序原理性能3 插入排序原理性能4 计数排序原理性能适用场景5 基数排序原理性能6 快速排序原理性能内省排序7 归并排序原理性能8 堆排序原理性能9 桶排序原理性能适用场景10 希尔排序原理性能排序算法 稳…

设计模式_11 桥接模式(含 UML图 和 C++代码)

设计模式_10 桥接模式11 桥接模式11.1 概念11.2 结构11.3 实现11.3.1 UML图11.3.2 代码11.4 优点11.5 使用场景return 设计模式概述;11 桥接模式 11.1 概念 将抽象与实现分离&#xff0c;使他们可以独立变化。用组合关系代替继承关系来实现&#xff0c;从而降低了抽象和实现这…

设计模式_12 外观模式(含 UML图 和 C++代码)

设计模式_12 外观模式12 外观模式12.1 概念12.2 结构12.3 实现12.3.1 UML图12.3.2 代码12.4 优缺点12.4.1 优点12.4.2 缺点12.5 使用场景retur 设计模式概述;12 外观模式 12.1 概念 通过为多个复杂子系统提供一个一致的接口&#xff0c;而使这些子系统更加容易被访问的模式。…

设计模式_13 组合模式(含 UML图 和 C++代码)

设计模式_13 组合模式13 组合模式13.1 概念13.2 结构13.3 实现13.3.1 UML图13.3.2 代码13.3.3 测试结果13.4 分类13.4.1 透明组合模式13.4.2 安全组合模式13.5 优点13.6 使用场景retur 设计模式概述;13 组合模式 13.1 概念 用于把一组相似的对象当做一个单一的对象。组合模式…

设计模式_14 享元模式(含 UML图 和 C++代码)

设计模式_14 享元模式14 组合模式14.1 概念14.2 结构14.2.1 状态14.2.2 角色14.3 实现14.3.1 UML图14.3.2 代码14.4 优缺点14.4.1 优点14.4.2 缺点14.5 使用场景retur 设计模式概述;14 组合模式 14.1 概念 利用共享技术来有效支持大量细粒度对象的复用。通过共享已经存在的对…

设计模式_15 模板方法模式(含 UML图 和 C++代码)

设计模式_15 模板方法模式15 模板方法模式15.1 概念15.2 结构15.3 实现15.3.1 UML图15.3.2 代码15.4 优缺点15.4.1 优点15.4.2 缺点15.5 使用场景return 设计模式概述;15 模板方法模式 15.1 概念 定义一个操作中的算法骨架&#xff0c;而将算法的一些步骤延迟到子类中&#x…