在 Go 中,代理模式可以应用于许多场景,例如:

  1. 远程代理:在客户端和远程服务之间创建代理,客户端通过代理来访问远程服务。
  2. 虚拟代理:在需要大量资源的对象创建时,可以使用代理来延迟对象的实际创建,直到真正需要使用它。
  3. 安全代理:在访问敏感信息时,可以使用代理来控制对信息的访问权限。

下面我们通过一个例子来展示 Go 中代理模式的应用。

假设我们有一个 Image 接口,其中定义了一个 Display 方法用于显示图片,同时还有一个 RealImage 实现了该接口,用于真正的图片展示。我们还有一个代理对象 ProxyImage,它也实现了 Image 接口,但是在 RealImage 对象还未初始化完成时,ProxyImage 会先显示一张默认的图片,等到 RealImage 对象初始化完成后再显示真正的图片。

具体实现如下:

在上面的代码中,我们定义了一个 Image 接口和它的实现 RealImage,RealImage 实现了 Display 方法用于展示图片。同时,我们还定义了一个代理对象 ProxyImage,它也实现了 Image 接口,并在 Display 方法中根据需要创建 RealImage 对象,实现了代理模式的延迟初始化功能。

最后,在 main 函数中我们创建了一个 ProxyImage 对象并调用了 Display 方法,此时如果 RealImage 对象还未初始化完成,ProxyImage 会先显示一张默认的图片,等到 RealImage 对象初始化完成后再显示真正的图片。