编写代理类:实现目标的接口或者直接继承目标类,完成逻辑的修改
接口实现方式:
关于接口的方式,我们在实现接口的时候,目标类和代理类都必须实现目标接口当中所实现的方法,从某种意义上代理类就可以帮我们实现目标类当中的方法,并且代理类还可以有自己的扩展方法。
举例子:1
最开始我们想买东西就必须代购,因为只有代购员才知道真实的工厂在哪里
代码实现,一个包proxy,建一个目标接口买衣服ByClothes
public interface ByClothes {
public void clothes(String size);
}
接口要实现,建一个目标类工厂ClothesFactory,
public void ClothesFactory implements ByClothes {
@Override
public void clothes(String size) {
System.out.println("以为你定制一套size为"+size"的衣服");
}
}
制造代理对象-------代购
public class proxy implements ByClothes {
//被包含的真是对象
public ClothesFactory factory;
public proxy(ClothesFactory factory) {
// TODO Auto-generated constructor stub
this.factory = factory;
}
@Override
public void clothes(String size) {
FrontService();
factory.clothes(size);
endService();
}
//前置服务
public void FrontService() {
System.out.println("根据您的需求进行市场调研");
}
//前置服务
public void endService() {
System.out.println("为您提供一条龙的包办服务");
}
}
制造测试类------买衣服的人
public class Test {
public static void main(String[] args) {
ClothesFactory clothesFactory = new ClothesFactory();
proxy proxy = new proxy(clothesFactory);
proxy.clothes("XXl");
}
}
细节:我们的目标对象必须实现我们的接口,同时代理对象也必须实现这一接口
静态代理存在哪些问题?
违反了开闭原则:
程序对访问开放,对修改关闭,换句话来说,当需求发生变化时,我们可以增加新模块来解决新需求,而不是通过改变原来的代码来解决我们的新需求。