代理模式

介绍

结构设计模式,为其他对象提供了一个代理,以控制对这个对象的访问。

使用场景

当无法或者不想(能)直接访问某个对象或者想要在调用某个对象的某个方法的时候进行一些额外的操作,但又不想修改对象的代码,这时候可以通过一个代理对象来进行间接的访问,为了保护客户端使用的透明性,委托对象与代理对象需要实现相同的接口。

简单实现

律师帮人辩护

1
2
3
4
5
6
7
8
9
10
public interface ILawsuit {
//提交申请
void submit();
//进行举证
void burden();
//开始辩护
void defend();
//结束辩护
void finish();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class XiaoMing implements ILawsuit {

@Override
public void submit() {
System.out.println("帮提交申请");
}

@Override
public void burden() {
System.out.println("帮小明出示欠条");
}

@Override
public void defend() {
System.out.println("律师开始帮小明开始辩护");
}

@Override
public void finish() {
System.out.println("律师辩护完毕");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class Lawyer implements ILawsuit {
ILawsuit iLawsuit;


public Lawyer(ILawsuit iLawsuit){
this.iLawsuit=iLawsuit;
}

@Override
public void submit() {
iLawsuit.submit();
}

@Override
public void burden() {
iLawsuit.burden();
}

@Override
public void defend() {
iLawsuit.defend();
}

@Override
public void finish() {
iLawsuit.finish();
}
}
1
2
3
4
5
6
7
8
9
public static void main(String[] args){

Lawyer lawyer = new Lawyer(new XiaoMing());
lawyer.submit();
lawyer.burden();
lawyer.defend();
lawyer.finish();

}

代理分为静态代理跟动态代理,静态代理如上所示,动态代理参考链接

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器