1、静态代理的角色解析
抽象角色->通常使用接口或者抽象类来实现
真是角色->被代理的角色
代理角色->代理真实角色->代理真实角色后通常会做一些附属操作。
客户->使用代理角色来进行一些操作
AbstractSubject
↑ ↑
Client ----------------------》proxy---------》RealSubject
比如说租房子,代码实现为:
Rent.java是抽象类的角色
public interface Rent {
public void rent();
}
Host.java是真实角色(房东)
public class Host implements Rent{
public void rent() {
System.out.println("rent host");
}
}
Proxy.java代理角色
public class Proxy implements Rent{
private Host host;
public Proxy() {
}
public Proxy(Host host) {
this.host = host;
}
public void setHost(Host host) {
this.host = host;
}
public void rent() {
seeHouse();
host.rent();
fare();
}
private void seeHouse() {
System.out.println("take client to host");
}
private void fare() {
System.out.println("get money from client");
}
}
Client.java 客户
public class Cilent {
public static void main(String[] args) {
Host host = new Host();
Proxy proxy = new Proxy(host);
proxy.rent();
}
}
输出:
take client to host
rent host
get money from client
使用静态代理可以使真实角色处理的业务更加的精准,不用再去关注公共的东西
公共的业务由代理来完成------实现了业务的分工
公共业务发生扩展时变得更加集中和方便
静态代理缺点: 类多了 (多了一个代理类,导致工作量变大,开发效率降低)
动态代理完美解决