代理模式
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。
在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。最典型的就是SpringAOP,我们不再直接new对象了,而是通过spring动态代理来获取对象。
示例演示:
我们创建一个people的接口
1
2
3
4
5
6package test.proxy;
public interface People {
void say();
}创建一个实现类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15package test.proxy;
public class PeopleImpl implements People {
private String name;
public PeopleImpl(String name) {
this.name = name;
System.out.println("Loading...");
}
public void say() {
System.out.println("my name is " + name);
}
}创建一个实现类的代理类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18package test.proxy;
public class ProxyPeople implements People {
private PeopleImpl peopleImpl;
private String name;
public ProxyPeople(String name) {
this.name = name;
}
public void say() {
if (peopleImpl == null) {
peopleImpl = new PeopleImpl(name);
}
peopleImpl.say();
}
}完成上述步骤,我们就可以开始演示了
1
2
3
4
5
6
7
8
9
10package 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
4Loading...
my name is radio
---------------------------------
my name is radio
说明:
优点: 1、职责清晰。 2、高扩展性。 3、智能化。
缺点: 1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。 2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。