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();
}
}