1、基本介绍

在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。

意图:为其他对象提供一种代理以控制对这个对象的访问。 主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。 何时使用:想在访问一个类时做一些控制。 如何解决:增加中间层。 关键代码:实现与被代理类组合。 应用实例: 1、歌手刘德华开演唱会,他的经纪人为他做代理,为他操办一些事情,刘德华只管唱歌。

2、具体实现

代理模式的实现有静态代理和动态代理,本示例讲解的是静态代理。

  • 定义抽象接口

    1. public interface IStar {
    2. void sing();
    3. }
  • 定义具体实现

    1. public class LDHStar implements IStar {
    2. @Override
    3. public void sing() {
    4. System.out.println("刘德华专心唱歌");
    5. }
    6. }
  • 定义代理类

    1. public class ProxyManager implements IStar {
    2. private IStar iStar;
    3. public ProxyManager(IStar iStar) {
    4. this.iStar = iStar;
    5. }
    6. @Override
    7. public void sing() {
    8. System.out.println("代理经纪人演唱会前准备");
    9. iStar.sing();
    10. System.out.println("代理经纪人演唱会结束收尾工作");
    11. }
    12. }
  • 测试

    1. public class StaticProxyDemo {
    2. public static void main(String[] args) {
    3. IStar iStar = new LDHStar();
    4. ProxyManager proxyManager = new ProxyManager(iStar);
    5. proxyManager.sing();
    6. }
    7. }

    image.png