泛型模板化设计DEMO
泛型模板化设计DEMO
1. 定义Result泛型类
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.定义了程序的主要实现流程
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.请求基类和返回基类
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.第一个实现类
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.第二个实现类
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.测试类
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));
}
}
泛型模板化设计DEMO的更多相关文章
- Android移动应用界面的模板化设计
Android没有像苹果开发那样功能强大的界面开发工具,本身 ADT插件提供的界面编辑能力有限,没办法刻画所有的界面情况:Android的界面xml代码可以进行人工修改,而Iphone的全部在图形界面 ...
- 11款扁平化设计的 Twitter Bootstrap 主题和模板
扁平化设计和 Bootstrap 框架是2013年网页设计领域的两大设计潮流.把这两者集合起来不是件容易的事情,使用下面这些主题和模板将节省我们的开发时间,因为我们可以修改已有的基础代码,而不是从零开 ...
- 16个时髦的扁平化设计的 HTML5 & CSS3 网站模板
创建网站最好办法之一是使用现成的网站模板或使用开源 CMS 应用程序.所以,今天这篇文章给大家带来的是16款基于 HTML5 & CSS3 的精美的扁平风格网站模板,大家可以借助这些优秀的网站 ...
- 利用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出
我们知道,一般都导出的Word文档或者Excel文档,基本上分为两类,一类是动态生成全部文档的内容方式,一种是基于固定模板化的内容输出,后者在很多场合用的比较多,这也是企业报表规范化的一个体现. 我的 ...
- 扁平化设计的最新趋势 – 长阴影(Long Shadow)
随着互联网的发展,网页设计变得越来越复杂,如今设计的外观和感觉实现网站功能说使用的开发技术一样重要.互联网的功能远远不只是基本的信息共享,现在人们对网站的期望是远远大于几年前的. 如今,HTML5 & ...
- 10、ERP设计之系统基础管理(BS)- 平台化设计
ShareERP 2013-09-03 ERP业务平台化是每个软件提供商必须要进行的趋势,传统定制化路线已死,不能走定制化的老路了.以往最大问的题是不能累积和沉淀技术及提升项目业务管理能力,其次是管理 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1)框架搭建 前言:这 ...
- 读书笔记 effective c++ Item 43 了解如何访问模板化基类中的名字
1. 问题的引入——派生类不会发现模板基类中的名字 假设我们需要写一个应用,使用它可以为不同的公司发送消息.消息可以以加密或者明文(未加密)的方式被发送.如果在编译阶段我们有足够的信息来确定哪个信息会 ...
- java接口入参模板化,适用于企业化服务远程调度模板化的场景,接口入参实现高度可配置化
需求:远程服务接口模板化配置提供接入服务 模板接口分为三个模块:功能路由.参数校验.模板入库 路由:这里的实现方式很简单,就是根据业务标识找到对应的处理方法 参数校验: 参数校验这步涉及模板和校验类两 ...
- ASP.NET:MVC模板化机制
模版化的核心是定制ViewEngine.完整的模板化必须实现3个功能:1.网站的多套模版(razor)支持 2.模版的多样式(style)支持. 3.按需实现模版:没有实现的加载默认模版. 我们除了要 ...
随机推荐
- Apache Flink在 bilibili 的多元化探索与实践
简介: bilibili 万亿级传输分发架构的落地,以及 AI 领域如何基于 Flink 打造一套完善的预处理实时 Pipeline. 本文由 bilibili 大数据实时平台负责人郑志升分享,本次分 ...
- 火山引擎ByteHouse:OLAP如何支持超高QPS点查?
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在当今高速发展的互联网时代,信息传播迅速,用户数量激增.在面对如此庞大的用户群体和高频的访问需求时,系统高并发访问 ...
- EPAI手绘建模APP常用工具栏_1
1.常用工具栏 图 1 常用工具栏 (1) 撤销 (2) 重做 (3) 删除 (4) 复制 ① 选中场景中的模型后,复制按钮变成可用状态,否则变成禁用状态.可以选择多个模型一起复制. (5) 变换 图 ...
- vue使用websoket(非封装)
上代码: create:function(){ this.initWebpack() } methods:{ initWebpack(){//初始化websocket let us ...
- windows server2012 挂载linux的nfs共享目录
1.安装NFS客户端 首先win-server上添加角色-----选择文件服务-----网络文件系统(或者NFS客户端)-安装 2.挂载nfs目录 先cmd检查服务端的共享目录 然后执行:showmo ...
- Linux(一):Linux操作系统
Linux(一):Linux操作系统 对于我们编程人员来讲,linux对于我们几乎已经是像windows对于普通用户一样,好像和同行交流说不会linux就像说不会用计算机一样羞耻.这里打算从头开始温故 ...
- VForm
VForm是一款基于Vue 2/Vue 3的低代码表单,支持Element UI.iView两种UI库,定位为前端开发人员提供快速搭建表单.实现表单交互和数据收集的功能. VForm全称为Varian ...
- 推荐一个好用的.net开发框架
企业应用开发平台(Enterprise Develop Platform),以下简称EDP.EDP是一套集完整组织架构,全面权限体系,以及各类基础功能于一体的基于.net的企业应用开发平台.其最大的特 ...
- windows安装nginx可视化工具nginxWebUI
一.官网下载ngixn * 官网地址<http://nginx.org/> 选取稳定版(Stable Version)二.解压压缩包三.启动Nginx1.进入安装目录下,找到nginx.e ...
- JDK源码阅读-------自学笔记(六)(java.util.Arrays用法和描述浅析)
工具类的使用 要多使用这个类,同时,很多算法包含其中,常见操作排序.查找.填充.打印等. 1.打印数组 ------Arrays.toString() 1 // 整型初始化 2 int[] integ ...