接口工厂
/** * <pre> * Title: 接口工厂 * </pre> */ public abstract class AbstractInterfaceFactory { protected static final Logger logger = Logger .getLogger(AbstractInterfaceFactory.class.getName()); public static AbstractInterfaceFactory getInstance(){ return new DefaultInterfaceFactory(); } /** 私有化, */ protected AbstractInterfaceFactory(){} public <T> T getWebService(Class<T> oldInterface) { InterfaceHandler intr = new InterfaceHandler(this); Object bufferedInter = Proxy.newProxyInstance(getClass() .getClassLoader(), new Class[] { oldInterface }, intr); return (T) bufferedInter; } /** 子类实现 */ protected abstract Object remoteCall(String methodName, Object[] args); /** 代理类 */ private static final class InterfaceHandler implements InvocationHandler { private AbstractInterfaceFactory factory; public InterfaceHandler(AbstractInterfaceFactory factory) { this.factory = factory; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { String remoteMethodName = method.getName(); logger.info("开始调用接口:" + remoteMethodName); Object rst = factory.remoteCall(remoteMethodName, args); logger.info("完成调用"); return rst; } } /** 静态工厂的默认实现 */ private static final class DefaultInterfaceFactory extends AbstractInterfaceFactory { protected Object remoteCall(String methodName, Object[] args) { logger.info("远程方法调用中....."); return methodName; } } }
实际接口
/** * * <pre> * Title: 任意定义的两个接口 * </pre> */ public interface MyInterface { public String getVersion(); public String doJob(); }
测试类
public class testInterfaceFactory { public static void main(String[] args) { AbstractInterfaceFactory factory = AbstractInterfaceFactory.getInstance(); MyInterface intr = factory.getWebService(MyInterface.class); System.out.println("获取版本:" + intr.getVersion()); intr = factory.getWebService(MyInterface.class); System.out.println("doJob:" + intr.doJob()); } }
运用:远程调用WebService时,可以考虑使用。