C++设计模式:代理模式(十三)

1、代理模式
  • 定义:为其他对象提供一种代理以控制(隔离使用接口)对这个对象的访问等。

  • 动机

    • 在面向对象系统中,有些对象由于某种原因(比如对象需要进程外的访问等,例如在分布式的系统中),直接访问会给使用者或系统结构带来很多麻烦。
    • 如何在不失去透明操作(无感知)对象的同时来管理/控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的一种解决方式。
  • 个人理解:

    • 代理模式在一些例如AOP编程中大量的使用动态代理模式
    • AOP概念:面向切面编程,英文全称Aspect Oriented Programming;AOP是OOP编程的延伸,也是软件开发中的一个热点,也是Java语言Spring框架中的一个重要组成部分,是函数式编程的一种衍生范型。
    • AOP作用:利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率
    • AOP原理:AOP底层是通过动态代理(接口代理、Cglib代理)。通过动态代理可以在程序运行的时候针对某些功能进行逻辑层面的增强,从而达到在不修改源代码的情况下能够使得某些方法功能加强,当不需要增强时直接去掉代理,也不用修改源代码!总之:AOP的作用就是解耦!
      在这里插入图片描述
2、案例分析
2.1、基础实现
class ISubject{
public:virtual void process() = 0;
};
class RealSubject: public ISubject{
public:virtual void process() override{// .....}
};
class ClientApplication{
private:ISubject *subject;
public:ClientApplication(ISubject *iSubject): subject(iSubject){}void DoTask(){subject->process();}
};
  • 假设现在有一个ISubject的接口和一个实现子类、在ClientApplication类中需要依赖这个接口和子类、很朴素的做法就是在通过注入的方式加入进来,也可以通过工厂方法等方式搞一个ISubject的子类么。
  • 但其实这种做法包括工厂等都有一个大前提条件,就是依赖的这个ISubject的接口、子类与当前需要使用的类ClientApplication接口在同一个进程中或者同一个项目下,这样就能保证加载到么。
2.1、代理模式
  • 而如果在一些分布式系统中,不同项目之间通常有一些接口功能的调用请求,通过一些手段加载到当前项目中。

  • 这种调用等一些操作都会通过RPC或者GRPC一些远程调用的方式来加载这个对象,此时这种直接注入的方式就无效了。

  • 这时候代理模式就体现出它的作用了,通过加上代理层代理所需对象的功能,所需对象的加载在这里完成并且调用,对外暴露接口让ClientApplication调用。

  • 这样做的好处是:

    • 首先是透明的:ClientApplication对这个只管使用并不关心它怎么来的
    • 其次是高内聚低耦合:代理的过程放到一个方法中,而不融入到调用的地方。这样就功能高度内聚,接口之间低耦合。
class ISubject{
public:virtual void process() = 0;
};
class SubjectProxy: public ISubject{
public:virtual void process() override{/** 对RealSubject的一种间接访问* 这其中伴随着很复杂的一些过程* 总之这里可能会获取到一个RealSubject的对象*/RealSubject realSubject = ....;realSubject.process();}
};
class ClientApplication{
private:ISubject *subject;
public:ClientApplication(ISubject *proxySubject): subject(proxySubject){}void DoTask(){subject->process();}
};
3、总结
  • “增加一层”是软件系统重对许多复杂问题的一种常见解决方法。在面向对象系统中,直接使用某些对象会带来很多问题,作为间接层的proxy对象便是解决这一问题的常用手段。

  • 具体proxy设计模式的实现方法、实现粒度都相差很大,有些可能对单个对象做细粒度的控制,如copy-on-write技术,有些可能对组件模块提供抽象代理层,在架构层次对对象做proxy(例如aop)

  • Proxy并不一定要求保持接口完整的一致性,只要能够实现间接控制,有时候损失一些透明性也是可以接受的。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/616108.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5G Frequency Bands 频率分布

连接:https://www.5g-networks.net/5g-technology/5g-frequency-bands/

基于springboot+vue实现的药品信息管理系统

作者主页:Java码库 主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】:Java 【框架】:spring…

意得辑真不错

意得辑真不错,85喆优惠码延长到25.12.31了我用editage意得辑润色SCI已经第4年了,今天他家的学术支持老师让我写几句感受,那我真的感受太多了。因为下单太多一度被导师怀疑是在他家套经费。22年刚读博同时润色了三篇,被导师叫到办公…

环信 IM 客户端将适配鸿蒙 HarmonyOS

自华为推出了自主研发操作系统鸿蒙 HarmonyOS 后,国内许多应用软件开始陆续全面兼容和接入鸿蒙操作系统。环信 IM 客户端计划将全面适配统鸿蒙 HarmonyOS ,助力开发者快速实现社交娱乐、语聊房、在线教育、智能硬件、社交电商、在线金融、线上医疗等广泛…

C语言函数指针应用——计算器(转移表)的使用

对与上一节,我们对指针函数已经有了深刻意识了;练一练吧 如果还没有学习到,也是没有关系的,可以看一看这一篇 C语言详解指针-CSDN博客https://blog.csdn.net/Asuku_/article/details/137690083希望能提高你对指针的理解 计算器的实…

KVM + GFS 分布式存储

目录 一、案例分析 1.1、案例概述 1.2、案例前置知识点 1)Glusterfs 简介 2)Glusterfs 特点 1.3、案例环境 1)案例环境 2)案例需求 3)案例实现思路 二、案例实施 2.1、安装部署 KVM 虚拟化平台 1&…

04异常Lambda算法正则

异常 异常是什么? 异常是代码在编译或者执行的过程中可能出现的错误。避免异常的出现,同时处理可能出现的异常,让代码更稳健。 异常分为几类? 编译时异常、运行时异常。编译时异常:没有继承RuntimeExcpetion的异常…

Centos7.6部署minikube

1、什么是minikube ? Minikube是由Kubernetes社区维护的单机版的Kubernetes集群,支持macOS, Linux, and Windows等多种操作系统平台,使用最新的官方stable版本,并支持Kubernetes的大部分功能,从基础的容器编排管理,到…

字符和字符串操作函数总结

索引 一 . 字符操作函数1. 字符分类函数2. 字符转换函数 二 . 字符串操作函数长度不受限制的字符串操作函数1. strcpy函数的使用和模拟实现2. strcat函数的使用和模拟实现3. strcmp函数的使用和模拟实现 长度受限制的字符串操作函数1. strncpy函数的使用2. strncat函数的使用3.…

开源 Ruo-Yi 项目引入 Mybatis-Plus:3.5.3 报错ClassNotFoundException:

开源 Ruo-Yi 项目引入 Mybatis-Plus:3.5.3 报错ClassNotFoundException: Caused by: java.lang.ClassNotFoundException: com.baomidou.mybatisplus.extension.plugins.MybatisPlusInter1 分析问题 控制台报错说明我们引入的 mybatis-plus 的依赖里找不到com.baom…

word从零基础到高手【办公】

第1课 - word基础操作快速入门第2课 - 让你效率10倍提升的快捷操作第3课 - word排版快速入门第4课 - 排版实战案例讲解第5课 - 搞定论文排版全过程第6课 - 让你的word更强大的神技第7课 - 提高工作效率必备的批量操作 资料截图如下: 发送: "word办公" 获取提取码

传输层协议——UDP/TCP协议

目录 端口号 端口号范围 pidof UDP协议 UDP协议格式 UDP特点 UDP缓冲区 UDP的注意事项 基于UDP的应用层协议 TCP协议 TCP协议格式 序号与确认序号 窗口大小 6个标记位 紧急指针 确认应答机制 连接管理机制 三次握手 四次挥手 超时重传机制 流量控制 滑动…