静态代理的实现步骤
- 首先要抽象出一个被代理类接口,被代理类实现该接口。
- 代理和被代理类实现相同的接口
**注:**被代理类又叫委托类、目标类
优点
解耦
缺点
- 因为代理类和代理类实现了相同的接口,存在重复代码
- 如果接口增加一个方法,除了所有被代理类需要实现这个方法之外,还需要所有的代理类也实现这个方法,增加了代码的复杂度.
举例
/**
*小明和小红都要将自己的房子出售或者出租 抽象出一个接口
*/
public interface House {
public void sell();
public void rentalHouse();
}
package com.my.controller.proxy;
/**
* 小红的房子
*/
public class XiaoHongHose implements House {
@Override
public void sell() {
System.out.println("小红卖房子");
}
@Override
public void rentalHouse() {
System.out.println("小红出租房子");
}
}
package com.my.controller.proxy;
/**
* 小明的房子
*/
public class XiaoMingHose implements House {
@Override
public void sell() {
System.out.println("小明卖房子");
}
@Override
public void rentalHouse() {
System.out.println("小明出租房子");
}
}
package com.my.controller.proxy;
/**
* 代理类
*/
public class Agent implements House {
private House house;
public Agent(House house){
this.house=house;
}
@Override
public void sell() {
System.out.println("卖房子前给干点事");
house.sell();
System.out.println("卖房子后给干点事");
}
@Override
public void rentalHouse() {
System.out.println("租房子前给干点事");
house.rentalHouse();
System.out.println("租房子后给干点事");
}
}
package com.my.controller.proxy;
public class ProxyMain {
public static void main(String[] args) {
House xiaoHongHose = new XiaoHongHose();
Agent xiaoagent = new Agent(xiaoHongHose);
xiaoagent.sell();
House xiaoMingHose = new XiaoMingHose();
Agent xiaoMingAgent = new Agent(xiaoMingHose);
xiaoMingAgent.rentalHouse();
}
}
运行结果:
卖房子前给干点事
小红卖房子
卖房子后给干点事
租房子前给干点事
小明出租房子
租房子后给干点事
具体哪个框架里面用到的静态代理还没看到,一般都是动态代理