//20210120
写在前面:刚期末考试完,考了面向对象,里边儿有23个设计模式,我寻思着考完挨个儿实现一下,本文实现适代理模式
核心思想
- 创建一个代理类来面对客户,而非委托方直接面对客户,代理类对客户类为一对一,代理类可以在委托类基础上附加额外功能,但是主要业务工作哦还是交给委托方,只不过科普不会直接接触到委托方
程序源代码如下:
静态代理:
//买房接口
public interface BuyHouse {
void buyHouse();
}
//委托方(买房接口实现类)
public class BuyHouseImpl implements BuyHouse{
@Override
public void buyHouse() {
System.out.println("我要买房");
}
}
//代理方(买房接口实现类)
/**
* 将主要业务交给委托方,代理类面向客户以及附加额外功能
*/
public class BuyHouseProxy implements BuyHouse{
private BuyHouse buyHouse;
public BuyHouseProxy(final BuyHouse buyHouse){
this.buyHouse = buyHouse;
}
@Override
public void buyHouse() {
System.out.println("买房前准备");
buyHouse.buyHouse();
System.out.println("买房后装修");
}
}
动态代理:
- 使用JDK自带代理接口
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("买房前准备");
Object result = method.invoke(object,args);
System.out.println("买房后装修");
return result;
}
}
//测试主类
import java.lang.reflect.Proxy;
public class Main {
public static void main(String[] args) {
//静态代理
BuyHouse buyHouse = new BuyHouseImpl();
System.out.println("测试委托方原有功能:");
buyHouse.buyHouse();
BuyHouse buyHouseProxy = new BuyHouseProxy(buyHouse);
System.out.println("
测试代理方功能:");
buyHouseProxy.buyHouse();
//使用JDK中自带动态代理接口
BuyHouse buyHouse_1 = new BuyHouseImpl();
BuyHouse proxyBuyHouse = (BuyHouse) Proxy.newProxyInstance(BuyHouse.class.getClassLoader(),
new Class[]{BuyHouse.class},
new DynamicProxyHandler(buyHouse_1));
proxyBuyHouse.buyHouse();
}
}
- 输出如下:
以上
希望对大家有所帮助