您的位置:首页 > 编程语言 > Java开发

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

2012-06-27 15:26 190 查看
采用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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: