Java静态代理类的特点和示例

采用Java代理模式,代理类通过调用委托类对象的方法,来提供特定的服务。委托类需要实现一个业务接口,代理类返回委托类的实例接口对象。

按照代理类的创建时期,可以分为:静态代理和动态代理。

所谓静态代理: 指程序员创建好代理类,编译时直接生成代理类的字节码文件。

静态代理类的特点: 代理类和委托类实现了相同的接口,代理类通过委托类实现了相同的方法。这样就出现了大量的代码重复。而且代理类只能为特定的接口(Service)服务。

一、静态代理类实例:

1、Serivce.java


    package com.ibm.delegate;  
      
    /**
     * 定义一个服务接口
     * @author IBM
     */  
    public interface Service {  
          
        /**
         * 查询日期
         */  
        public String queryDate();  
        /**
         * 计算两个整数之差
         */  
        public int sub(int a, int b);  
    }  

2、ServiceImpl.java


    package com.ibm.delegate;  
      
    import java.util.Date;  
      
    /**
     * 委托类需要实现服务接口(必须)
     * @author IBM
     */  
    public class CountImpl implements Service {  
      
        @Override  
        public String queryDate() {  
            return new Date().toString();  
        }  
      
        @Override  
        public int sub(int a, int b) {  
            return a-b;  
        }  
          
        public void ownMethod(){  
            System.out.println("It's my own method");  
        }  
    }  
3、ServiceProxy.java


    package com.ibm.staticproxy;  
      
    import com.ibm.delegate.Serivce;  
    import com.ibm.delegate.CountImpl;  
      
    /**
     * @author IBM
     * 静态代理类
     */  
    public class SerivceProxy implements Service {  
        private CountImpl countImpl;  
          
        public SerivceProxy(CountImpl countImpl){  
            this.countImpl = countImpl;  
        }  
          
        @Override  
        public String queryDate() {  
            return countImpl.queryDate();  
        }  
      
        @Override  
        public int sub(int a, int b) {  
            return countImpl.sub(a, b);  
        }  
          
        public void ownMethod(){  
            System.out.println("It's my own method");  
        }  
    }  
4、ServiceTest.java(测试类)


    package com.ibm;  
      
    import com.ibm.delegate.ServiceImpl;  
    import com.ibm.staticproxy.ServiceProxy;  
      
    public class ServiceTest {  
      
        /**
         * @param args
         */  
        public static void main(String[] args) {  
            //创建委托类实例,即被代理的类对象  
            ServiceImpl target = new ServiceImpl();  
            //创建静态代理类  蘑菇街社区
            ServiceProxy proxy = new ServiceProxy(target);  
            String date = proxy.queryDate();  
            System.out.println(date);  
            int result = proxy.sub(10, 20);  
            System.out.println("10-20 = "+result);  
            proxy.ownMethod();  
        }  
    }  

posted @ 2012-06-27 15:26  ctou45  阅读(259)  评论(0编辑  收藏  举报