一、代理是什么?
代理的概念:
生活中的代理是很常见的,比如代购、律师、中介等,他们都有一个共性就是帮助被代理人处理一些前前后后的事情。而被代理人只需要专注做自己要做的那部分事情就可以了。
Java中的代理也是类似的,代理模式可以实现帮助被代理者完成一些前期的准备工作和后期的善后工作,但是核心的业务逻辑仍然是由被代理者完成。
二、使用步骤
代码步骤:
1.接口
⒉真实角色
3.代理角色
4.客户端访问代理角色
下面以(伪)数据库增删改查为例子:
1.需要的类
业务的接口
package com.shan.demo02;
public class Client {
public static void main(String[] args) {
UserServiceImpl userService = new UserServiceImpl();
Proxy proxy = new Proxy();
proxy.setUserService(userService);
proxy.add();
proxy.delete();
proxy.update();
proxy.query();
}
}
业务的实现类
package com.shan.demo02;
//改变业务代码在公司是大忌,因为你改动代码可能让整个项目崩溃
public class UserServiceImpl implements UserService{
@Override
public void add() {
System.out.println("增加了一个用户");
}
@Override
public void delete() {
System.out.println("删除了一个用户");
}
@Override
public void update() {
System.out.println("修改了一个用户");
}
@Override
public void query() {
System.out.println("查询了一个用户");
}
}
客户类
package com.shan.demo02;
public class Client {
public static void main(String[] args) {
UserServiceImpl userService = new UserServiceImpl();
Proxy proxy = new Proxy();
proxy.setUserService(userService);
proxy.add();
proxy.delete();
proxy.update();
proxy.query();
}
}
代理类
package com.shan.demo02;
//使用代理输出一个日志,不改变原有业务的代码
public class Proxy implements UserService{
private UserServiceImpl userService;
public void setUserService(UserServiceImpl userService) {
this.userService = userService;
}
@Override
public void add() {
log("add");
userService.add();
}
@Override
public void delete() {
log("delete");
userService.delete();
}
@Override
public void update() {
log("update");
userService.update();
}
@Override
public void query() {
log("query");
userService.query();
}
//日志输出
public void log(String msg){
System.out.println("[Debug]使用了" + msg +"方法");
}
}
2.解析
客户想要对数据库进行修改,可是客户他不会,于是客户找到了帮他做这个app的程序员(代理类),程序员来帮他完成对数据库的修改,程序员还可以干自己的事情,程序员为了能更加清楚的知道他使用了数据库的哪个方法,于是他有加了一个日志输出,没有改变原有的业务代码,不会影响到业务。
最终客户只要找到代理类,去调用代理的方法就能完成对数据库的修改,而不需要直接面向这个数据库!并且代理类能有他自己的事情(加一个日志输出),不会影响业务!
这就是代理的作用!
总结
优点
- 可以使真实角色的操作更加纯粹!不用去关注一些公共的业务
- 公共业务交给了代理,实现了业务的分工
- 公共业务发生拓展时,方便集中管理
缺点:
- 一个真实的角色就会产生一个代理,代码量翻倍,开发效率降低
作者有话说
博客创作不易,希望看到这里的读者动动你的小手点个赞,如果喜欢的小伙伴可以一键三连,作者大大在这里给大家谢谢了。