Radio

一个小小程序员

0%

代理模式

代理模式

在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。

在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。最典型的就是SpringAOP,我们不再直接new对象了,而是通过spring动态代理来获取对象。

示例演示:
  1. 我们创建一个people的接口

    1
    2
    3
    4
    5
    6
    package test.proxy;

    public interface People {

    void say();
    }
  2. 创建一个实现类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    package test.proxy;

    public class PeopleImpl implements People {
    private String name;

    public PeopleImpl(String name) {
    this.name = name;
    System.out.println("Loading...");
    }

    @Override
    public void say() {
    System.out.println("my name is " + name);
    }
    }
  3. 创建一个实现类的代理类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    package test.proxy;

    public class ProxyPeople implements People {
    private PeopleImpl peopleImpl;
    private String name;

    public ProxyPeople(String name) {
    this.name = name;
    }

    @Override
    public void say() {
    if (peopleImpl == null) {
    peopleImpl = new PeopleImpl(name);
    }
    peopleImpl.say();
    }
    }
  4. 完成上述步骤,我们就可以开始演示了

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    package test.proxy;

    public class ProxyDemo {
    public static void main(String[] args) {
    People people = new ProxyPeople("radio");
    people.say();
    System.out.println("---------------------------------");
    people.say();
    }
    }

    运行结果:

    1
    2
    3
    4
    Loading...
    my name is radio
    ---------------------------------
    my name is radio
说明:

优点: 1、职责清晰。 2、高扩展性。 3、智能化。

缺点: 1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。 2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。

欢迎关注我的其它发布渠道