A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 1958078929 中级黑马   /  2015-6-25 15:26  /  545 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

静态代理:每个代理类只为一个接口服务
动态代理:指客户通过代理类来调用其他对象的方法,并且是在程序运行时根据需要动态创建目标类
//静态代理代码:
package itheima;
import java.lang.reflect.*;
import java.util.*;
public class apple {

        /**
         * @param args
         */
        public static void main(String[] args) throws Exception{
                NikeClothFactory nike=new NikeClothFactory();
                ProxyFactory proxy=new ProxyFactory(nike);
                proxy.productCloth();
               
        }
       
       

}
//接口
interface ClothFactory{
        void productCloth();
}
//被代理类
class NikeClothFactory implements ClothFactory {
       
        public void productCloth(){
                System.out.println("NiKe工厂生产一批衣服");
        }
}
//代理类
class  ProxyFactory  implements ClothFactory{
          ClothFactory  cf;
          public ProxyFactory(ClothFactory cf){
                  this.cf=cf;       
          }
        public void productCloth() {
                // TODO Auto-generated method stub
                System.out.println("代理类开始执行,收代理费100");
                  cf.productCloth();
               
        }
}


//动态代理代码
import java.lang.reflect.*;



//动态代理接口
        interface Subject{
                void action();
        }

//被代理类
class RealSubject implements Subject
{
                public void action()
                        {
                                System.out.println("我是被代理类,我来了");
                        }
}

class MyInvocationHandler   implements InvocationHandler {
        Object obj;//实现了接口的被代理类声明
        public Object bind(Object obj)
        {
                this.obj=obj;
                return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
        }
       
        public Object invoke(Object proxy,Method method,Object[] args)throws Throwable{
                Object returnVal=method.invoke(obj, args);
                return returnVal;
        }
}

class apple1{
        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                //1.被代理类的对象
                RealSubject real=new RealSubject();
                //2.创建了一个实现了InvacationHandler接口的类的对象
                MyInvocationHandler handler=new MyInvocationHandler();
                //3.调用bind()方法,动态的返回一个同样实现了real所在类实现的接口Subject的代理对象
                Object obj=handler.bind(real);
                Subject sub=(Subject)obj;//此时的sub为代理类的对象
                //4.转到对InvacationHandler接口实现类的invoke()方法调用
                sub.action();
               
               
                NikeClothFactory  nike=new NikeClothFactory();
               
               

        }

}


3 个回复

倒序浏览
来学习学习。
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
观摩观摩
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马