• 【golang】代理模式 proxy using in go


    1. Proxy Pattern what? how?       

    代理模式是一种结构模式,其目的是提供对象的代理或中介来控制对象的访问。通常包装对象以隐藏其某些特征。下面举一个汽车的代理,Driven接口,Car和CarProxy都实现了,但是通过代理可以实现特殊逻辑的植入,如开车司机并限制司机的年龄等;

    1. package main
    2. import "fmt"
    3. type Driven interface {
    4. Drive()
    5. }
    6. type Car struct {}
    7. func (c *Car) Drive(){
    8. fmt.Println("Car being driven")
    9. }
    10. type Driver struct {
    11. Age int
    12. }
    13. type CarProxy struct {
    14. car Car
    15. driver *Driver
    16. }
    17. func (c *CarProxy) Drive(){
    18. if c.driver.Age >= 18 {
    19. c.car.Drive()
    20. }else{
    21. fmt.Println("Driver too young!!!")
    22. }
    23. }
    24. func NewCarProxy(driver *Driver) *CarProxy {
    25. return &CarProxy{Car{}, driver}
    26. }
    27. func main(){
    28. car := NewCarProxy(&Driver{20})
    29. car.Drive()
    30. }
    31. output:
    32. Car being driven

    2. 代理模式和其他模式的关系:

    • 门面模式和代理模式是相似的,因为在两者都可以缓冲复杂的实体,并初始化它自己。

    • Adapter 模式为包装对象提供了一个不同的接口,而代理模式提供了相同的接口,修饰模式(Decorator Pattern)提供了一个增强的接口。

    3. 优点和缺点

     

      优点:

    • 允许在客户端不知道的情况下控制服务对象(main struct)。
    • 允许在客户端不关心的情况下管理服务对象的生命周期。
    • 即使服务对象尚未准备好或尚未可用,代理也可以工作。
    • 帮助实施开闭原则(open-close)。

    缺点:

    • 代码可能会变得复杂,因为引入许多新类。
    • 服务响应可能受到影响,因为添加了执行时间的延迟

  • 相关阅读:
    vscode配合gitee同步云设置
    Cookie和Session的区别
    MFC知识点
    MySQL高级SQL语句
    一种数字全息自动聚焦技术研究及实例分析
    一文轻松掌握深度学习框架中的einsum
    SQL 选择数据库 USE语句
    使用kibana本地连接服务器es
    SEO是什么?独立站如何进行SEO优化
    【ELFK】之zookeeper
  • 原文地址:https://blog.csdn.net/qfzhangwei/article/details/126567805