1:静态代理概念
使用一个代理对象将对象包装起来,然后用该代理对象来取代该对象,
任何对原始对象的调用都要通过代理对象,代理对象决定 什么时候 调用原始对象的方法【使用的多态特点(子类引用指向父类对象,执行方法时,是执行子类的代码)】
2:静态代理特点
2.1:目标角色固定【必须是实现指定接口或者类的对象!!!】
2.2:在应用程序执行前就得到目标角色
2.3:代理对象会增强目标对象的行为
2.4:有可能存在多个代理 引起"类爆炸"(缺点) 缺点:代理对象和目标对象需要实现同一个接口
3:代码实现
3.1:编写共同的接口,定义行为方法名
public interface Marry {
public void toMarry();
}
3.2:定义目标对象类,实现接口
/*** 静态代理 ——> 目标对象 */
public class You implements Marry{
@Override
public void toMarry() {
System.out.println("我要结婚了");
}
}
3.3:定义代理类,实现接口
/**
* 这个代理,只能代理实现了Marry接口的对象
*/
public class MarryCompanyProxy implements Marry{
// 目标对象
private Marry marry;
// 通过构造器将目标对象传入
public MarryCompanyProxy(Marry marry) {
this.marry = marry;
}
@Override
public void toMarry() {
// 增强行为
before();
// 执行目标对象中的方法
marry.toMarry();
// 增强行为
after();
}
/*** 增强行为 */
private void after() {
System.out.println("新婚快乐,早生贵子!");
}
/*** 增强行为 */
private void before() {
System.out.println("场地正在布置中...");
}
}
3.4:代码测试
public class Test {
public static void main(String[] args) {
You you = new You();
MarryCompanyProxy marryCompanyProxy = new MarryCompanyProxy(you);
marryCompanyProxy.toMarry();
}
}