go设计模式之代理模式

go设计模式之代理模式

代理模式的基本思想是,需要服务的代码只与代理类打交道,而实际工作的部分隐藏在代理的背后。它的主要的目的是希望隐藏实现的部分,从而消除代码的耦合。

举个例子来说就是像电脑桌面的快捷方式。电脑对某个程序提供一个快捷方式(代理对象),快捷方式连接客户端和程序,客户端通过操作快捷方式就可以操作那个程序。

定义

代理模式(Proxy Pattern)指,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。

作用

在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。

上面可能讲的比较专业,我们来打个比方,比如一个类它有很多方法,我们可以通过多个代理将这些方法进行拆分,例如:远程代理,虚拟代理,防火墙代理等等。这样对于使用代理的人来说,就只能接触到具体功能,而不必考虑其他功能,使结构更加多元。

通过代理我们可以将背后的实现机制隐藏,使用者只需要关心如何调用,而不必关心内部如何使用。

下面我们通过UML图来进一步说明:

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

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

相关文章

go设计模式之单例模式

在这里插入图片描述# go设计模式之单例模式 在软件开发时,经常会遇到有些对象需要保证只有一个实例的,那么这种设计模式就应用而生。 定义 单例模式,也叫单子模式,是一种常用的软件设计模式,属于创建型模式的一种。在应用这个模式时,单例对象的类必须保证只有一个实例…

go设计模式之装饰器模式

go设计模式之装饰器模式 再写这篇文章时,我已经看了很多其他人发表的类似文章,大概看了这么多吧。 亓斌的设计模式-装饰者模式(Go语言描述)jeanphorn的Golang设计模式之装饰模式七八月份的太阳的Golang装饰器设计模式(九)我个人都不是很满意,所以才自己从头开始写关于go语…

go切片窥探

go切片窥探 切片(slice)是对数组一个连续片段的引用(该数组我们称之为相关数组,通常是匿名的),所以切片是一个引用类型(因此更类似于C/C++中的数组类型,或者Python中的list类型)。这个片段可以是整个数组,或者是由起始和终止索引标识的一些项的子集。需要注意的是,…

go反射机制与类型识别

go反射机制与类型识别 在写 go 程序的时候,难免会遇到使用反射机制获取一些结构体或者变量的动态类型,java 和 C# 高级编程语言提供了很好的反射机制,但是在 C 语言中基本是不存在的,C++ 需要有很多语法糖来实现反射,但是技术要求很高,go 语言虽然没有泛型,单是基本的反…

go反射实战之数组的查找Find过滤Filter函数实现

go反射实战之数组的查找过滤函数实现 在使用的go的时候,如果想要在数组中查找一个元素每次都要写一个循环来查找,过滤也是一样,没有一个能打的函数来帮助我们干这些事情,通过前面的学习,我们可以通过反射实现Find和Filter函数。 上篇文章连接 go反射机制与类型识别。 在…

go利用反射实现任意类型切片删除元素

go利用反射实现任意类型切片删除元素 在使用Go切片的时候,我们经常会需要删除切片内的元素,但是由于类型的限制,导致我们需要写很多类似的函数,那么下面我们通过go的反射机制实现一个任意类型的切片元素删除。 这里只是讲如何实现的教程,同类型还有很多函数我们可以实现…

go实现数组切片洗牌函数Shuffle

go实现数组切片洗牌函数Shuffle 在深度学习、机器学习中,我们经常会使用到一个叫 Shuffle 函数,我一般叫打乱函数,也有人叫 洗牌 函数,就是听着高级点, 它可以帮助我们打乱数据集,那么在go中我们如何实现一个呢? 大家可以直接使用我写的一个工具库 lodago,有点lodash…

go validator使用教程

go validator使用教程 很多时候在B/S开发过程中,经常会遇到对参数的校验工作,一般客户端需要提前验证一次提交的数据是否合理,以减少后端的压力,而后端是必须要对数据做验证的。 一般验证的方式大多都是if-else,这种方式会让你掉入无底的深渊,就像下面一样。 [图片来源…

DeepL与有道翻译对比

DeepL与有道翻译对比 近期有一个叫DeepL的翻译工具很火。DeepL Translator 是于2017年8月由 DeepL GmbH(一家由Linguee支持的创业公司)推出的翻译服务,支持汉语、英语、德语、法语、日语、西班牙语、意大利语、荷兰语及波兰语之间的翻译。其…

golang代理转发基础

golang代理转发基础 go标准库已经实现了一个反向代理工具,通过代理将客户端的请求转发到代理服务器。 什么是反向代理? 维基百科解释: ”In computer networks , a reverse proxy is a type of proxy server that retrieves resources on behalf of a client from one or…

使用Go和WebSockets构建实时聊天服务器

使用Go和WebSockets构建实时聊天服务器 源代码连接 Go Chat 现在web应用变得越来越复杂,前端开发人员的工资也是水涨船高。现在的web程序有些是可以实时更新的,用户无需主动调用服务器或刷新浏览器。在早期,开发人员需要依靠ajax请求来创建非常接近实时的应用程序,现在他们…

如何更新Postgresql的Jsonb数组

如何更新Postgresql的Jsonb数组 假设你决定将数据以json或者jsonb的形式存储在数据库中,然后发现你刚刚给自己制造了新的问题,而这些问题是以前没有的。 jsonb是一个强大的工具,但它也有一定的代价,因为你需要调整查询和处理数据…

golang操作postgresql数据库jsonb类型

golang操作postgresql数据库jsonb类型 本文以案例为主,少言,自悟。 推荐一个测试sql的网站 SQL操作 // 创建一个带有jsonb列的表 CREATE TABLE items (id SERIAL PRIMARY KEY,attrs JSONB );// 插入一条数据 INSERT INTO items (attrs)

Angular模板高级使用

Angular模板高级使用 使用ng-template Angular自带一个叫做ng-template的组件,它允许我们声明Angular模板的任何部分。这是给我们的模板赋予动态性的一种很好的方式,让我们能够把我们的代码传递给其他组件。 在app.component.html文件中写一个ng-template组件。 <ng-t…

golang定时任务的使用

golang定时任务的使用 由于 golang 标准库内没有比较好的定时任务包,所以这里将使用一个第三方的 cron 包,由于此包存在一些不适用的地方,所以对此做了一些简单封装。 cron简介 robfig/cron是一个第三方开源的任务调度库,也就是我们平时说的定时任务。 Github官方文档安…

go之树型结构深度理解

go之树型结构深度理解 如果你是一个编程人员,或多或少对树型结构都有一定的认识,我个人对树型数据结构是又爱又恨。这篇文章主要讲解一些关于tree的数据结构以及使用。 什么是树? 数组、列表、队列、队列、堆栈都是以一个集合的形式存储数据,一般称它们被称为 "线性…

go之树型结构深度理解补充

go之树型结构深度理解补充 在上一篇中借用了 Ilija Eftimov 文章来讲解了tree的定义和一些方法。这篇文章主要是讲解在树型结构中如何判断节点与节点之间的关系。 A节点是否是B节点的直接上级A节点是否是B节点的可跳跃的上级(即中间隔开几个节点的间接上级)上一篇文章连接 g…

golang之jsonb类型的支持

golang之jsonb类型的支持 jsonb是一个很好的存储方式,可以省去我们很多的数据库复杂设计,简化架构。那么我们在golang中如何使用? 当然我们是不能直接使用的,所以这篇文章将指导你在golang中如何正确的使用jsonb。 场景 我们希望在应用程序中处理这种实体。 {id: …

Go信号gsignal和宿主Signal

信号gsignal和宿主Signal signal包提供了信号处理程序,并允许我们的Go程序与输入的信号进行交互。 订阅 信号的订阅是通过channel来完成的,下面是一个例子,功能是监听任何终端信号或者终端退出的信号。 每个os.Signal通道监听自己的事件。 Go还提供了停止通知通道的功能,…

Angular实现图片点击缩放组件

Angular实现图片点击缩放组件 本文将设计一个用于网页中点击图片缩放的 Angular 组件。阅读需要注意的是,本文只讲解原理和设计理念,不过多讲解Angular框架的API。 线demo。 需求分析 一般用户在阅读文章的时候,由于种种限制,图片会比较小,所以需要提供一个可以查看图…