java 服务端提供多个接口时小架构

背景:在开发的过程中已经需要提供多个接口给外围系统。服务端在实现想使用统一的方法处理多个接口,例如判断传入的参数是否合理。
1.定义两个接口

package org.common.single.inf;

import org.common.single.condition.Condition1;

public interface IQueryService extends IQueryBaseService{

public void myService(Condition1 condition);
}




package org.common.single.inf;

import org.common.single.condition.Condition2;

public interface IQueryService2 extends IQueryBaseService{

public void myService2(Condition2 condition);
}



package org.common.single.inf;

public interface IQueryBaseService {

}


这两个接口的实现类

import org.common.single.condition.Condition1;
import org.common.single.inf.IQueryBaseService;
import org.common.single.inf.IQueryService;

public class QueryServiceImpl extends QueryServiceBase implements IQueryService {
//具体的实现类
IQueryBaseService service;

public QueryServiceImpl(IQueryBaseService service) {
this.service = service;
}

@Override
public void myService(Condition1 condition) {
baseService(service,"myService",condition);
}

}



import org.common.single.condition.Condition2;
import org.common.single.inf.IQueryBaseService;
import org.common.single.inf.IQueryService2;

public class QueryService2Impl extends QueryServiceBase implements IQueryService2 {
//具体的实现类
IQueryBaseService service;

public QueryService2Impl(IQueryBaseService service) {
this.service = service;
}

@Override
public void myService2(Condition2 condition) {
baseService(service,"myService",condition);
}

}



import org.common.single.condition.Condition;
import org.common.single.inf.IQueryBaseService;

public class QueryServiceBase {

protected void baseService(IQueryBaseService service, String methedName, Condition condition) {
if (!condition.isVaild()){
System.out.println("condition is invaild");
} else {
try {
//这里的反射会存在性能问题,可使用MethodAccess缓存需要查找的函数反射的耗时
Method m = service.getClass().getMethod(methedName, condition.getClass());
m.invoke(service, condition);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}


真正的实现类

import org.common.single.condition.Condition1;
import org.common.single.inf.IQueryService;

public class QueryClient implements IQueryService{

@Override
public void myService(Condition1 condition) {
System.out.println("query client service");
}

}



import org.common.single.condition.Condition2;
import org.common.single.inf.IQueryService2;

public class QueryClient2 implements IQueryService2{

@Override
public void myService2(Condition2 condition) {
System.out.println("query client service2");
}

}


条件类:

public class Condition1 implements Condition {

private int param;

@Override
public boolean isVaild() {
return param > 0;
}

public int getParam() {
return param;
}

public void setParam(int param) {
this.param = param;
}

}



public class Condition2 implements Condition{

private String param;
@Override
public boolean isVaild() {
return param != null;
}

}


public interface Condition {
public boolean isVaild();
}


测试一下:

import org.common.single.client.QueryClient;
import org.common.single.client.QueryClient2;
import org.common.single.condition.Condition1;
import org.common.single.condition.Condition2;
import org.common.single.inf.IQueryService;
import org.common.single.inf.IQueryService2;
import org.common.single.inf.impl.QueryService2Impl;
import org.common.single.inf.impl.QueryServiceImpl;

public class Main {
public static void main(String[] args) {
IQueryService serice = new QueryServiceImpl(new QueryClient());
Condition1 condition = new Condition1();
condition.setParam(2);
serice.myService(condition);

IQueryService2 serice2 = new QueryService2Impl(new QueryClient2());
Condition2 condition2 = new Condition2();
serice2.myService2(condition2);
}
}


打印结果:
query client service
condition is invaild

小结:这也可以理解为父类利用反射调用子类的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值