251031 thinking proxy
1. 什么是代理模式
代理模式是一种结构型设计模式,它通过引入一个代理对象来控制对另一个对象的访问。代理对象可以在客户端和目标对象之间添加额外的功能,如延迟加载、访问控制、日志记录等。
2. 为什么需要代理模式
代理模式的核心价值在于在不改变原始对象(目标对象)代码的前提下,增加额外的控制和功能。它像一个中介,隔离了客户端和真实对象,并在中间“做手脚”。
3. 代理模式的实现 (Go)
我们用 Go 实现一个保护代理的例子。假设我们有一个 Web 服务器,希望通过一个 Nginx 代理来限制用户的访问速率。
- 客户端、代理和真实服务都应遵循同一个接口,这样代理才能“伪装”成真实服务。
1 | // Server 是代理和真实服务器的通用接口 |
- 创建真实服务 (RealSubject)
这是我们真正要保护的后端应用。
1 | // Application 是我们的后端真实服务 |
- 创建代理 (Proxy)
Nginx 代理持有对真实服务的引用,并在处理请求前增加了速率限制的逻辑。
1 | import "fmt" |
- 客户端调用
客户端只与代理(Nginx)交互,并不知道真实服务(Application)的存在。
1 | func main() { |
类图
classDiagram
class Client
class Server {
<<interface>>
+HandleRequest(url, method)
}
class Application {
+HandleRequest(url, method)
}
class Nginx {
-application: *Application
-maxAllowedReq: int
-rateLimiter: map
+HandleRequest(url, method)
-checkRateLimit(url): bool
}
Client --> Server : uses
Server <|.. Application : implements
Server <|.. Nginx : implements
Nginx o-- Application : aggregates
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Elian's blog page!