Java设计模式之代理模式

 

 

动态代理:

步骤一、首先必须定义接口

public interface Animal {
    public String eat(String food);
}

步骤二、定义接口的实现类(目标类)
 

public class Dog implements Animal {
    @Override
    public String eat(String food) {
        return "狗吃"+food;
    }

}

步骤三、实现InvocationHandler实现类并实现构造方法初始化。(和静态代理的区别 就在于Object 类型参数)

public class MyInvocationHandler implements InvocationHandler {
    /*创建目标对象*/
    private Object target;
    public MyInvocationHandler(Object target) {
        this.target=target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
       /*
			 * proxyObj 就是代理对象,newProxyInstance方法的返回对象
			 * method 调用的方法
			 * arg数组 放的是方法中的参数
			 * */
		  
                System.out.println("前置增强");
				
				object=metnod.invoke(factory,"冰箱");//根据你调用的方法参数 进行匹配方法
				
		        System.out.println("后置增强");
			
				
			
				return object;
    }
}

步骤四、调用Proxy.newProxyInstance()生成代理类对象。

/*目标对象*/
Dog dog = new Dog();

/*调用函数对象*/
MyInvocationHandler myInvocationHandler=new MyInvocationHandler(dog);

/*Proxy.newProxyInstance()生成的是Animal接口的实现类
	和目标类Dog是兄弟关系。
*/
Animal animal = (Animal) Proxy.newProxyInstance
        (
                dog.getClass().getClassLoader(),

                dog.getClass().getInterfaces(),
    
                myInvocationHandler


        );/*创建Dog代理对象*/
String foodDog = animal.eat("骨头");
System.out.println(foodDog);

你可能感兴趣的:(Java设计模式)