静态代理
举个例子,现在有个家庭需要结婚,但结婚需要很多复杂的事务,比如婚礼彩排,宴会等,这时复杂的事务可以交给婚庆公司来代理。
- 接口:Imary
- 真实角色:Home
- 代理角色:WeddingCompany
- 客户:访问代理角色
1 编写接口:
package marry;
public interface Imarry {
void marry();
}
2 需要结婚的家庭
该家庭需要结婚,所以需要实现结婚的Imarry接口。
package marry;
public class Home implements Imarry {
@Override
public void marry() {
System.out.println("我们结婚了!!!");
}
}
3 婚庆公司
该公司代理婚庆等事务,所以也要实现Imarry接口。
package marry;
public class WeddingCompany implements Imarry {
private Imarry imarry;
public WeddingCompany(Imarry imarry){
this.imarry = imarry;
}
@Override
public void marry() {
sing();//节目彩排
imarry.marry();//结婚
eat();//婚宴布置
}
public void sing(){
System.out.println("节目彩排");
}
public void eat(){
System.out.println("婚宴布置");
}
}
4 静态代理的过程
将需要结婚的家庭,交给婚庆公司来执行相关事务。
package marry;
public class Test {
public static void main(String[] args) {
Imarry imarry = new WeddingCompany(new Home());
imarry.marry();
}
}
静态代理的优点:
- 公共的业务由代理来完成 ,实现了业务的分工 ,在一定程度上实现了解耦合。
- 公共业务发生扩展时变得更加集中和方便 .
缺点 :
- 如果有多个真实角色(Home),那么就需要创建100个代理对象,工作量变大了,开发效率降低.。
- 静态代理类(WeddingCompany)需要实现目标类(Home)的接口(Imary),并实现其方法,造成了代码的大量冗余。