买房接口
public interface BuyHouse {
void buyhouse();
void writehetong();
}
买房接口实现类
public class BuyHouseImpl implements BuyHouse {
@Override
public void buyhouse() {
System.out.println(“i want to buy house”);
}
public void writehetong(){
System.out.println(“i want to write hetong”);
}
}
买房代理public class BuyHouseProxy implements BuyHouse {
private BuyHouse house;
public BuyHouseProxy(final BuyHouse buyHouse){
house=buyHouse;
}
@Override
public void buyhouse() {
System.out.println("bfore buy house ");
house.buyhouse();
System.out.println("after buy house");
}
@Override
public void writehetong() {
System.out.println("bfore write house ");
house.writehetong();
System.out.println("after write house");
}
}
买房动态代理
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class DynamicProxyHandler implements InvocationHandler {
private Object object;
public DynamicProxyHandler(final Object object){
this.object=object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("before i buy house");
Object result=method.invoke(object,args);
System.out.println("after you buy house");
return result;
}
}
静态代理测试类
public class Test {
public static void main(String[] args) {
BuyHouseImpl buyHouse=new BuyHouseImpl();
buyHouse.buyhouse();
buyHouse.writehetong();
BuyHouseProxy buyHouseProxy=new BuyHouseProxy(buyHouse);
buyHouseProxy.buyhouse();
buyHouseProxy.writehetong();
}
}
动态代理测试类
import java.lang.reflect.Proxy;
public class DynamicProxyTest {
public static void main(String[] args) {
BuyHouse buyHouse=new BuyHouseImpl();
BuyHouse proxyBuyhouse= (BuyHouse) Proxy.newProxyInstance(BuyHouse.class.getClassLoader(),new Class[]{BuyHouse.class},new DynamicProxyHandler(buyHouse));
proxyBuyhouse.buyhouse();
}
}
本文深入探讨了Java代理模式的应用,包括静态代理和动态代理的实现方式。通过具体的买房业务场景,详细讲解了如何使用代理模式来增强或修改目标对象的行为,而不改变其原有结构。
1853

被折叠的 条评论
为什么被折叠?



