1. 代理: 中介
2. 通过程序来实现租房功能。分析下在租房的过程中,有哪些对象:
- 房东
- 中介
- 房客
中介代理房东进行租房的功能,所以中介和房东具有相同的功能。为了保证中介和房东具有相同的功能,那么中介和房东需要实现相同的接口。
- 抽象的角色。
代码的实现:Rent.java
/** * * 租房接口 */ public interface Rent { //租房 public void rent(); }
Host.java
/** * * @author siggy * @version v.10 */ public class Host implements Rent{ @Override public void rent() { System.out.println("房东租房"); } }
Proxy.java
/** * 中介 */ public class Proxy implements Rent{ private Host host; public Proxy(Host host) { super(); this.host = host; } @Override public void rent() { fare(); host.rent(); maintance(); } private void fare(){ System.out.println("收取中介费"); } private void maintance(){ System.out.println("维护"); } }
Client.java
public class Client { public static void main(String[] args) { Host host = new Host(); Proxy proxy = new Proxy(host); proxy.rent(); } }
以上代码就是静态代理的实现。通过上述案例可以知道:
3. 静态代理是由4哥角色组成的:
- 抽象角色
- 真实角色
- 代理角色
- 调用角色
类图:
4. 将静态代理应用到项目中:
公共的业务:Log.java
public class Log { public static void log() { System.out.println("日志:类,方法, 参数"); } }
UserService.java
public interface UserService { public void save(); public void update(); public void delete(); public void get(); }
UserServiceImpl.java
public class UserServiceImpl implements UserService{ /** * 在每次实现业务方法时 需要增加一些公共的功能。 * 如:日志,缓存,安全检查,事务等 */ public void save() { System.out.println("保存用户"); } @Override public void update() { System.out.println("更新用户"); } @Override public void delete() { System.out.println("删除用户"); } @Override public void get() { System.out.println("获取用户"); } }
UserServiceImplProxy.java
public class UserServiceImplProxy implements UserService{ private UserService userService; public void setUserService(UserService userService) { this.userService = userService; } @Override public void save() { //加入公共业务 Log.log(); userService.save(); } @Override public void update() { Log.log(); userService.update(); } @Override public void delete() { Log.log(); userService.delete(); } @Override public void get() { Log.log(); userService.get(); } }
5. 通过上述案例可知,静态代理:
优点:
- 将公共业务和真实业务分离,实现解耦动作。
- 方便了分工,做公共业务的人,专门处理公共业务,做领域业务的人做领域业务。利于维护
缺点:代码量增加,业务更复杂。