《golang设计模式》第二部分·结构型模式-07-代理模式(Proxy)

文章目录

  • 1. 概述
    • 1.1 角色
    • 1.2 模式类图
  • 2. 代码示例
    • 2.1 设计
    • 2.2 代码
    • 2.3 示例类图

1. 概述

代理(Proxy)是用于控制客户端访问目标对象的占位对象。

需求:在调用接口实现真是主题之前需要一些提前处理。
解决:写一个代理,同样实现该接口,但是在实现方法中加上这些提前操作。

1.1 角色

  • Subject(抽象主题):定义了真实主题的接口,之后定义代理也需要实现这个接口
  • Real Subject(真实主题):定义了代理所代表的真实对象,是代理模式中被代理的对象。
  • Proxy(代理):持有对真实主题的引用,并在需要的时候创建真实主题对象,实现抽象主题接口,可以访问、控制和扩展真实主题对象。

1.2 模式类图

Client
«interface»
Subject
+Service()
RealSubject
+Service()
Proxy
+RealSubject:RealSubject
+Service()

2. 代码示例

2.1 设计

  • 定义一个抽象主题sender
  • 定义两个真实主题weChatsms
    • 它们是sender的实现
    • 它们的send()方法负责发送告警
  • 定义一个代理类
    • 它也是sender的实现
    • 它的send()方法在在调用真实主题send()方法之前完成了报警前的处理
  • 调用
    • 实例化一个代理
    • 使用它的send()方法报警

2.2 代码

package mainimport ("fmt"
)// 发送告警接口
type sender interface {Send(event string)
}// 微信类
type weChat struct {
}// 微信类的发送方法
func (w *weChat) Send(event string) {fmt.Printf("微信报警:%s", event)
}// 短信类
type sms struct {
}// 短信类的报警方法
func (s *sms) Send(event string) {fmt.Printf("短信报警:%s", event)
}// 告警代理类
type AlertProxy struct {sendAlter sender
}// 告警代理类的发送方法
func (a *AlertProxy) Send(event string) {fmt.Println("报警前处理event…………")a.sendAlter.Send(event)
}
func main() {proxy := &AlertProxy{sendAlter: &sms{},}proxy.Send("内存使用率%100")}
  • 输出
报警前处理event…………
短信报警:内存使用率%100

2.3 示例类图

«interface»
sendAlert
+Send()
sms
+Send()
weChat
+Send()
client
AlertProxy
+Send()

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

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

相关文章

ViewPager、RecycleView实现轮播图

1.ViewPager实现轮播图形效果。 1&#xff09;layout中&#xff0c;PageIndicatorView轮播的View <RelativeLayoutandroid:layout_width"match_parent"android:layout_height"200dp"android:orientation"vertical"><androidx.viewpager…

http.header.Set()与Add()区别;

在Go语言中进行HTTP请求时&#xff0c;http.Header对象表示HTTP请求或响应的头部信息。http.Header是一个map[string][]string类型的结构&#xff0c;用于存储键值对&#xff0c;其中键表示HTTP头字段的名称&#xff0c;值是一个字符串切片&#xff0c;可以存储多个相同名称的头…

centos openssh升级

注意&#xff1a; openssh升级异常会造成服务失联&#xff0c;如果在允许的情况下可以安装talent服务&#xff0c;使用talent升级&#xff1b; 如果不能安装talent服务&#xff0c;可以打开多个终端&#xff0c;启动ping命令&#xff0c;防止升级终端失败后&#xff0c;作为备用…

巧用excel实现试卷向表格的转换

MID($E$10,FIND(D14,$E$10,1),FIND(D15,$E$10,1)-FIND(D14,$E$10,1)) MID($E$10,FIND(D15,$E$10,1),FIND(D16,$E$10,1)-FIND(D15,$E$10,1)) 中华人民共和国司法部

HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Span

作为Text组件的子组件&#xff0c;用于显示行内文本的组件。无子组件 一、接口 Span(value: string | Resource) 从API version 9开始&#xff0c;该接口支持在ArkTS卡片中使用。 参数&#xff1a; 参数名 参数类型 必填 参数描述 value string | Resource 是 文本内…

c++视觉---中值滤波处理

中值滤波&#xff08;Median Filter&#xff09;是一种常用的非线性平滑滤波方法&#xff0c;用于去除图像中的噪声。它不像线性滤波&#xff08;如均值滤波或高斯滤波&#xff09;那样使用权重来计算平均值或加权平均值&#xff0c;而是选择滤波窗口内的像素值中的中间值作为输…

docker搭建jenkins

1.拉取镜像 docker pull jenkinsci/blueocean 2.启动容器 docker run -d -u root -p 8666:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime --name MyJenkins jenkinsci/blueocean 3.访问ip:port,就能访问了 4.docker logs 容器…

主从复制的实现方案

读写分离技术架构图 实现读写分离的技术架构选型如上;需要自己去实践主从复制;为了节省资源&#xff0c;当然系统并发量并没有那么大,选择一主一丛;强制读主库,为了解决主从同步延迟带来的影响&#xff1b;对于实时性要求高的强制读主库&#xff1b;GTID 主要是一种事务标识技术…

linux centos运行C语言程序

1.安装gcc。 yum install gcc [rootlinux ~]# yum install gcc 已加载插件&#xff1a;fastestmirror, langpacks Repository updates is listed more than once in the configuration Repository extras is listed more than once in the configuration Loading mirror spee…

Ubuntu 22.04 铭瑄 MS-终结者 B760M D4 WIFI 驱动安装

wifi芯片为intel ax101ngw 直接装最新稳定版本linux 6.5.6 源码地址 https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.5.6.tar.xz .config参考 /boot/config-6.2.0-33-generic修改&#xff0c;完整内容如下 # # Automatically generated file; DO NOT EDIT. # Linux/…

OpenCV Python – 使用SIFT算法实现两张图片的特征匹配

OpenCV Python – 使用SIFT算法实现两张图片的特征匹配 1.要实现在大图中找到任意旋转、缩放等情况下的小图位置&#xff0c;可以使用特征匹配算法&#xff0c;如 SIFT (尺度不变特征变换) 或 SURF (加速稳健特征)。这些算法可以在不同尺度和旋转情况下寻找匹配的特征点 impo…

docker搭建nginx

1.docker pull nginx 2.docker run --name nginx-test -p 8082:80 -d nginx 3.访问ip:8082

Linux 系统性能瓶颈分析(超详细)

Author&#xff1a;rab 目录 前言一、性能指标1.1 进程1.1.1 进程定义1.1.2 进程状态1.1.3 进程优先级1.1.4 进程与程序间的关系1.1.5 进程与进程间的关系1.1.6 进程与线程的关系 1.2 内存1.2.1 物理内存与虚拟内存1.2.2 页高速缓存与页写回机制1.2.3 Swap Space 1.3 文件系统1…

在PicGo上使用github图床解决typora上传csdn图片不显示问题(保姆级教程)

文章目录 在PicGo上使用github图床解决typora上传csdn图片不显示问题&#xff08;保姆级教程&#xff09;1、typora上传csdn图片不显示&#xff08;外链图片转存失败&#xff09;2、PicGo2.1、PicGo下载2.2、PicGo使用2.2.1、对PicGo完成基本的配置2.2.2、配置github图床2.2.3、…

R实现地图相关图形绘制

大家好&#xff0c;我是带我去滑雪&#xff01; 地图相关图形绘制具有许多优点&#xff0c;这些优点使其在各种领域和应用中非常有用。例如&#xff1a;地图相关图形提供了一种直观的方式来可视化数据&#xff0c;使数据更容易理解和分析。通过地图&#xff0c;可以看到数据的空…

【C++笔记】C++三大特性之多态的概念、定义及使用

1.多态的概念 多态即多种形态&#xff0c;对于C程序设计中指的是在类的实例化对象中&#xff0c;当不同的对象去完成某个行为时会出现不同的状态。 2.多态的分类 静态的多态&#xff1a;函数重载&#xff0c;看起来调用同一个函数有不同行为。静态&#xff1a;原理是编译时实…

UE4 Unlua 初使用小记

function M:Construct()print(Hello World)print(self.Va)local mySubsystem UE4.UHMSGameInstanceSubsystemUE4.UKismetSystemLibrary.PrintString(self,"Get Click Msg From UnLua ")end unlua中tick不能调用的问题&#xff1a; 把该类的Event Tick为灰色显示的删…

【数据库审计】2023年数据库审计厂家汇总

我们大家都知道数据库审计的重要意义&#xff0c;不仅可以满足等保合规&#xff0c;还能进行风险告警&#xff0c;保障数据安全。那你知道目前市面上数据库审计厂家有哪些吗&#xff1f;这里小编就给大家汇总一下。 2023年数据库审计厂家汇总 1、行云管家 2、安恒信息 3、…

MongoDB-介绍与安装部署

介绍与安装部署 1.MongoDB简介a) 体系结构b) 数据模型c) MongoDB的特点c.1) 高性能c.2) 高性可用性c.3) 高拓展性c.4) 丰富的查询支持 2.单机部署a) Windows系统中的安装启动b) Shell连接(mongo命令)c) Linux系统中的安装启动和连接 1.MongoDB简介 MongoDB是一个开源、高性能、…

多头注意力机制

1、什么是多头注意力机制 从多头注意力的结构图中&#xff0c;貌似这个所谓的多个头就是指多组线性变换&#xff0c;但是并不是&#xff0c;只使用了一组线性变换层&#xff0c;即三个变换张量对 Q、K、V 分别进行线性变换&#xff0c;这些变化不会改变原有张量的尺寸&#xf…