静态代理是指,代理类在程序运行前就已经定义好.java源文件,其与目标类的关系在程序运行前就已经确立。在程序运行前代理类已经编译为.class文件。
在idea中创建java工程,
工程名称:ch01-staticproxy
定义业务接口UsbSell(目标接口),其中含有抽象方法sell(int amount), sell是目标方法。
目标类UsbKingFactory(金士顿u盘),该类实现了业务接口。
TaoBao就是一个代理类, 代理厂家销售u盘
WeiShang就是一个代理类, 代理厂家销售u盘
使用代理的访问关系图:
⒈代码复杂,难于管理
代理类和目标类实现了相同的接口,每个代理都需要实现目标类的方法,这样就出现了大量的代码重复。如果接口增加一个方法,除了所有目标类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度。
⒉代理类依赖目标类,代理类过多
代理类只服务于一种类型的目标类,如果要服务多个类型。势必要为每一种目标类都进行代理,静态代理在程序规模稍大时就无法胜任了,代理类数量过多。