1.静态代理模式应用场景
- 框架AOP,面向切面
- 扩展系统功能
- 在一定程度分离职责
- 安全代理:屏蔽对真实对象的访问
- 远程访问:通过代理类处理远程方法调用(RMI)
- 延迟加载:先加载轻量级的代理对象,真正需要的时候加载真实对象
2. 静态代理模式的案例
这里拿明星和明星的助理为例,说明静态代理
2.1 创建明星活动的接口
public interface IStar {
/**
* 面谈
*/
void confer();
/**
* 签合同
*/
void signContract();
/**
* 订票
*/
void bookTicket();
/**
* 唱歌
*/
void sing();
/**
* 收钱
*/
void collectMoney();
}
2.2 创建明星类
public class Star implements IStar {
private String name;
public Star(String name) {
this.name = name;
}
@Override
public void confer() {}
@Override
public void signContract() {}
@Override
public void bookTicket() {}
@Override
public void sing() {
System.out.println(this.getName() + "演唱会唱歌~ ~ ~");
}
@Override
public void collectMoney() {}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2.3 创建明星代理: Proxy
public class Proxy implements IStar {
private Star star;
public Proxy(Star star) {
this.star = star;
}
@Override
public void confer() {
System.out.println("代理人去面谈");
}
@Override
public void signContract() {
System.out.println("代理人去签合同");
}
@Override
public void bookTicket() {
System.out.println("代理人去订票");
}
@Override
public void sing() {
System.out.println("代理人去布置会场 ~");
star.sing();
}
@Override
public void collectMoney() {
System.out.println("代理人去收钱");
}
}
2.4 测试
public class Client {
public static void main(String[] args) {
IStar proxy = new Proxy(new Star("杨幂"));
proxy.confer();
proxy.signContract();
proxy.bookTicket();
proxy.sing();
proxy.collectMoney();
}
}
结果输出:
代理人去面谈
代理人去签合同
代理人去订票
代理人去布置会场 ~
杨幂演唱会唱歌~ ~ ~
代理人去收钱
3. 代理模式可以和哪些其他的设计模式结合呢?
- 可以与工厂结合
- 单例模式
- …