代理模式在 java 开发中是一种比较常见的设计模式。设计目的在为服务类与客户类之间插入其他功能,插入的功能对于调用者是透明的,起到伪装控制的作用,如租房的例子房客、中介、房东。对于代理模式中即:客户类、代理类、委托类(被代理类)。
代理模式的两个设计原则:
1.代理类与委托类具有相似的行为(共同)
2.代理类增强委托类的行为
Uml简图如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-opeunAy2-1601000538808)(https://imgkr.cn-bj.ufileos.com/a5ad9f62-88f4-4f8a-8b75-fa7e16358f6c.png)]
代理模式实现的方式
- 静态代理
- 动态代理
案例实操
静态代理
为某个对象提供一个代理,代理角色固定,以控制对这个对象的访问。代理类和委托类有共同的父类和父接口,这样在任何使用委托类对象的地方都可以用代理对象代替。代理类负责请求的预处理、过滤、将请求分派给委托类处理、以及委托类执行完请求后的后续处理。
/**
*
* 接口 抽象角色
* 定义行为
*/
public interface Marry {
public void toMarry();
}
/**
* 目标类 真实角色
*/
public class You implements Marry{
@Override
public void toMarry() {
System.out.println("等了这么久,终于等到你。。。 ");
}
}
/**
*
* 代理类 代理角色
* 1.与目标角色实现共同接口
* 2.持有目标类的引用
* 3.增强目标角色行为
*/
public class MarryCompany implements Marry{
// 目标角色引用
private Marry target;
public MarryCompany(Marry target) {
this.target = target;
}
public void before(){
System.out.println("婚礼现场紧张布置中......");
}
@Override
public void toMarry() {