[设计模式] 浅谈代理模式

2024 年 4 月 29 日 星期一
/ ,
8

阅读此文章之前,你可能需要首先阅读以下的文章才能更好的理解上下文。

代理模式

模式功能说明:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。

模式思路与原理

在代理模式中,一个类代表另一个类的功能。在代理中,我们创建具有现有对象的对象,以便向外界提供功能接口。

案例


interface Image {
    void display();
}

class RealImage implements Image {
    private String filename;
    public RealImage(String filename) {
        this.filename = filename;
        loadFromDisk();
    }
    private void loadFromDisk() {
        System.out.println("Loading " + filename);
    }
    public void display() {
        System.out.println("Displaying " + filename);
    }
}

class ProxyImage implements Image {
    private RealImage realImage;
    private String filename;
    public ProxyImage(String filename) {
        this.filename = filename;
    }
    public void display() {
        if (realImage == null) {
            realImage = new RealImage(filename);
        }
        realImage.display();
    }
}

public class ProxyPatternDemo {
    public static void main(String[] args) {
        Image image = new ProxyImage("test.jpg");
        image.display();
        System.out.println("");
        image.display();
    }
}

建了一个Image接口和实现了Image接口的实体类。ProxyImage是一个代理类,减少RealImage对象加载的内存占用。

使用场景:

  • 远程代理,这种方式通常是为了隐藏目标对象存在于不同地址空间的事实。
  • 虚拟代理,这种方式通常是为了完成在需要的时候创建大型对象。
  • 安全代理,这种方式通常是为了控制真实对象访问时的权限。
  • 智能指引,这是一种当调用真实的对象时,代理处理另外一些事。

优缺点

优点:

  1. 代理模式能够协调调用者和被调用者,在一定程度上降低了系统的耦合度。

  2. 代理对象在客户端和目标对象之间起到中介的作用,这样可以起到保护目标对象的作用。

缺点:

  1. 由于在客户端和真实主题之间增加了代理对象,因此会造成请求的处理速度变慢。

  2. 实现代理模式需要额外的工作,有些代理模式的实现非常复杂。

总结

代理模式使用了设计原则有:开闭原则(对扩展开放,对修改关闭)和单一职责原则(一个类只做一件事情)。 它在需要控制对原始对象的访问时非常有用,它可以作为一个层或接口以支持分布式访问,控制访问,或添加特殊的方式(如:记录日志,检查权限等)。

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...