admin管理员组文章数量:1794759
泛型模板化设计DEMO
泛型模板化设计DEMO
1. 定义Result泛型类
代码语言:javascript代码运行次数:0运行复制package com.example.core.mydemo.java.fanxing;
public class Result<T> {
T response;
public T getResponse() {
return response;
}
public void setResponse(T response) {
this.response = response;
}
}
2.定义了程序的主要实现流程
代码语言:javascript代码运行次数:0运行复制package com.example.core.mydemo.java.fanxing;
public abstract class BaseService<T> {
/**
* 定义了程序的主要实现流程-骨架
* @return
*/
public Result handle(BaseRequest request) throws Exception{
Result result = new Result();
method1();
// result.setResponse(method2());
/**
* request与response对象的绑定关系
*/
Class<T> responseClass = request.getResponseClass();
T rspt = null;
rspt = responseClass.newInstance();
rspt = method2();
result.setResponse(rspt);
return result;
}
/**
* 返回值-泛型,根据不同的业务返回不同的响应类型
* @return
*/
private T method2() {
T response = initResponse();//获取子类初始化的响应实例
System.out.println("BaseService method2");
return response;
}
/**
* 公共处理业务
*/
private void method1() {
System.out.println("BaseService method1");
}
/**
* 响应类型-泛型,提供出去给具体实现类进行初始化
* @return
*/
protected abstract T initResponse();
}
3.请求基类和返回基类
代码语言:javascript代码运行次数:0运行复制package com.example.core.mydemo.java.fanxing;
public interface BaseRequest<T extends BaseResponse> {
Class<T> getResponseClass();
}
package com.example.core.mydemo.java.fanxing;
public class BaseResponse {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
4.第一个实现类
代码语言:javascript代码运行次数:0运行复制package com.example.core.mydemo.java.fanxing;
public class ChinaRequest implements BaseRequest<ChinaResponse>{
@Override
public Class<ChinaResponse> getResponseClass() {
return ChinaResponse.class;
}
}
package com.example.core.mydemo.java.fanxing;
import java.util.List;
public class ChinaResponse extends BaseResponse{
List<String> province;
public List<String> getProvince() {
return province;
}
public void setProvince(List<String> province) {
this.province = province;
}
}
package com.example.core.mydemo.java.fanxing;
import java.util.Arrays;
public class ChinaServiceImpl extends BaseService<ChinaResponse>{
/**
* 实现抽象方法,初始化返回值类型
* @return
*/
@Override
protected ChinaResponse initResponse() {
ChinaResponse chinaResponse = new ChinaResponse();
chinaResponse.setName("中国");
chinaResponse.setProvince(Arrays.asList("湖南","山东"));
return chinaResponse;
}
}
5.第二个实现类
代码语言:javascript代码运行次数:0运行复制package com.example.core.mydemo.java.fanxing;
public class AmericaRequest implements BaseRequest<AmericaResponse>{
@Override
public Class<AmericaResponse> getResponseClass() {
return AmericaResponse.class;
}
}
package com.example.core.mydemo.java.fanxing;
import java.util.List;
public class AmericaResponse extends BaseResponse{
List<String> state;
public List<String> getState() {
return state;
}
public void setState(List<String> state) {
this.state = state;
}
}
package com.example.core.mydemo.java.fanxing;
import java.util.Arrays;
public class AmericaServiceImpl extends BaseService<AmericaResponse> {
/**
* 实现抽象方法,初始化返回值类型
* @return
*/
@Override
protected AmericaResponse initResponse() {
AmericaResponse americaResponse = new AmericaResponse();
americaResponse.setName("美国");
americaResponse.setState(Arrays.asList("纽约","华盛顿"));
return americaResponse;
}
}
6.测试类
代码语言:javascript代码运行次数:0运行复制package com.example.core.mydemo.java.fanxing;
import com.example.core.mydemo.json2.GsonUtils;
import com.google.gson.Gson;
/**
* output:
* BaseService method1
* BaseService method2
* {"province":["湖南","山东"],"name":"中国"}
* BaseService method1
* BaseService method2
* {"state":["纽约","华盛顿"],"name":"美国"}
*/
public class FanxingTest {
public static void main(String[] args) {
BaseService<ChinaResponse> baseService = new ChinaServiceImpl();
ChinaRequest chinaRequest = new ChinaRequest();
Result<ChinaResponse> result = null;
try {
result = baseService.handle(chinaRequest);
} catch (Exception e) {
e.printStackTrace();
}
ChinaResponse chinaResponse = result.getResponse();
System.out.println(new Gson().toJson(chinaResponse));
BaseService<AmericaResponse> americaService = new AmericaServiceImpl();
AmericaRequest americaRequest = new AmericaRequest();
Result<AmericaResponse> americaResult = null;
try {
americaResult = americaService.handle(americaRequest);
} catch (Exception e) {
e.printStackTrace();
}
AmericaResponse americaResponse = americaResult.getResponse();
System.out.println(new Gson().toJson(americaResponse));
}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-04-21,如有侵权请联系 cloudcommunity@tencent 删除程序泛型设计javapublic本文标签: 泛型模板化设计DEMO
版权声明:本文标题:泛型模板化设计DEMO 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1754972217a1708859.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论