一句话解释,就是买房子直接和中介沟通代替了和开发商沟通
过程
我们想要实现一个功能
- 建一个接口
I
定义该功能。 - 建一个类A实现该接口。
- 但是我们又不想让别人知道这个功能是A实现的,因此建一个类B实现接口
I
。
关键来了
类B并不是像A那样真的实现接口I
定义的功能,而是建一个A类的引用,然后实现时调用了A的实现,如:
I;//定义接口
//真实类
Class A :: I
{
实现I;
}
//代理类
Class B :: I
{
A a = null;
a.实现
}
//使用代理
B b = new B();
b.实现;
功能是A
实现的,但是我们例化的却是B
,在使用B
实现功能的时候隐藏了A
,B
是A
的代理。
作用
延迟加载
比如类A要干很多事,有时程序初始化需要例化A,这样很慢,可以改成如:
初始化时用B b = new B();代替A a = new A();//节省时间
.
.
.
//这里需要用到A的功能了
b.实现
安全代理
在代理类里面完成权限检查
辅助代理
当调用真实的对象时,代理处理另外一些事。比如计算真实对象的引用次数,这样当该对象没有引用时,可以自动释放它。
虚拟代理
虚拟代理,比如打开一个包含了大量的文字和图片的网页,我们可以很快看到文字,但是图片却是一张一张地下载后才能看到,那些未打开的图片框,就是通过虚拟代里来替换了真实的图片,此时代理存储了真实图片的路径和尺寸。