20230419 7. 代理模式

介绍

代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。

代理模式

  • ISubject类,定义了RealSubject和Proxy的共用接口
  • RealSubject类,定义Proxy所代表的真实实体
  • Proxy类,保存一个引用使得代理可以访问实体

代理模式都用在什么场合

  • 远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实
  • 虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象
  • 安全代理,用来控制真实对象访问时的权限
  • 智能指引,是指当调用真实的对象时,代理处理另外一些事

代理模式其实就是在访问对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途。

代码示例

ISubject

public interface IGirlGift {
    void giveFlowers();

    void giveChocolate();
}

RealSubject

public class SchoolBoy implements IGirlGift {
    private SchoolGirl schoolGirl;

    public SchoolBoy(SchoolGirl schoolGirl) {
        this.schoolGirl = schoolGirl;
    }

    @Override
    public void giveFlowers() {
        System.out.println("送花给 " + schoolGirl.getName());
    }

    @Override
    public void giveChocolate() {
        System.out.println("送巧克力给 " + schoolGirl.getName());
    }
}

Proxy

public class Proxy implements IGirlGift {
    private IGirlGift girlGift;

    public Proxy(SchoolGirl schoolGirl) {
        this.girlGift = new SchoolBoy(schoolGirl);
    }

    @Override
    public void giveFlowers() {
        girlGift.giveFlowers();
    }

    @Override
    public void giveChocolate() {
        girlGift.giveChocolate();
    }
}

其他

@AllArgsConstructor
@Data
public class SchoolGirl {
    private String name;
}

客户端

public class Test {
    public static void main(String[] args) {
        SchoolGirl schoolGirl = new SchoolGirl("小美");

        Proxy proxy = new Proxy(schoolGirl);

        proxy.giveFlowers();
        proxy.giveChocolate();
    }
}
posted @ 2023-06-19 09:43  流星<。)#)))≦  阅读(5)  评论(0编辑  收藏  举报