Spring模板模式和回调接口
来源:互联网 发布:武汉群光有mac的专柜吗 编辑:程序博客网 时间:2024/05/22 13:12
参考Spring模板模式和回调接口的一个应用
1.假设有如下的业务方法类:
- import java.util.Map;
- /**
- * 业务方法
- * @author yaol
- *
- */
- public class TestService {
- BaseDao dao = new BaseDao();
- public Object findById(Map params){
- /**
- * 检测参数
- */
- Object obj =null;
- String id = null;
- try{
- id = (String)params.get("id");
- }
- catch(Exception e){
- e.printStackTrace();
- return error();
- }
- /**
- * 获取结果
- */
- try{
- obj = dao.findById(id);
- return ok();
- }
- catch(Exception e){
- e.fillInStackTrace();
- return error();
- }
- }
- public Object findByPage(Map params){
- Object obj =null;
- int pageNo,pageSize;
- /**
- * 检测参数
- */
- try{
- pageNo =(Integer) params.get("pageNo");
- pageSize = (Integer)params.get("pageSize");
- }
- catch(Exception e){
- e.printStackTrace();
- return error();
- }
- /**
- * 获取结果
- */
- try{
- obj = dao.findByPage(pageNo, pageSize);
- return ok();
- }
- catch(Exception e){
- e.fillInStackTrace();
- return error();
- }
- }
- public Object error(){
- return "error";
- }
- public String ok(){
- return "ok";
- }
- }
- /**
- * Dao
- * @author yaol
- *
- */
- class BaseDao{
- public Object findById(String id){return null;}
- public Object findByPage(int pageNo,int pageSize){return null;}
- }
应该可以看出findById和findByPage结构是完全相同的.
先校验参数合法性,再根据参数获取结果,并且分别做异常处理.
如果业务方法增加的话,程序中会充斥了大量的异常处理代码.
如何减少这些重复的异常处理代码呢?
2.引入模板模式和回调接口
代码如下:
- /**
- * 回调接口
- * @author yaol
- *
- */
- interface ServiceCallback {
- /**
- * 验证参数合法性以及设置参数
- * @param map
- */
- public void checkAndSetParamters();
- /**
- * 获取数据
- * @param map
- * @return TODO
- */
- public Object getResult() throws Exception;
- }
- /**
- * 业务模板
- * @author yaol
- *
- */
- public class ServiceTemplate {
- public Object execute(ServiceCallback callback) {
- try {
- callback.checkAndSetParamters();
- } catch (Exception e) {
- e.printStackTrace();
- return error();
- }
- try {
- Object obj = callback.getResult();
- return ok();
- } catch (Exception e) {
- e.fillInStackTrace();
- return error();
- }
- }
- public Object error() {
- return "error";
- }
- public String ok() {
- return "ok";
- }
- }
3.改写业务方法类
- /**
- * 改写后的业务方法类
- * @author yaol
- *
- */
- public class TestService2 extends ServiceSupport{
- public Object findByPage(final Map params) {
- return getServiceTemplate().execute(new ServiceCallback() {
- int pageNo, pageSize;
- public void checkAndSetParamters() {
- pageNo = (Integer) params.get("pageNo");
- pageSize = (Integer) params.get("pageSize");
- }
- public Object getResult() throws Exception {
- return getDao().findByPage(pageNo, pageSize);
- }
- });
- }
- public Object findById(final Map params) {
- return getServiceTemplate().execute(new ServiceCallback() {
- String id = null;
- public void checkAndSetParamters() {
- id = (String)params.get("id");
- }
- public Object getResult() throws Exception {
- return getDao().findById(id);
- }
- });
- }
- public BaseDao getDao() {
- return new BaseDao();
- }
- }
- /**
- * ServiceSupport
- * @author yaol
- *
- */
- class ServiceSupport{
- public ServiceTemplate getServiceTemplate() {
- return new ServiceTemplate();
- }
- }
- /*
- 这里的ServiceSupport和Spring提供的XXXDaoSupport相似,而getServiceTemplate()类似于getHibernateTemplate()方法.
- 阅读优秀的开源代码对程序员是大有裨益的.
0 0
- Spring模板模式和回调接口
- 参考Spring模板模式和回调接口的一个应用
- Spring中模板模式和回调模式的讲解
- Spring中模板模式和回调模式的讲解
- Spring中模板模式和回调模式的讲解
- Spring中模板模式和回调模式的讲解
- Spring中模板模式和回调模式的讲解
- Spring中模板模式和回调模式的讲解
- Spring中模板模式和回调模式(一)
- Spring中模板模式和回调模式(二)
- 模板方法模式和回调模式
- spring-模板设计模式
- 模板回调模式
- spring模板模式与callback
- 《Spring中的模板设计模式》
- 配置虚拟接口模板和虚拟接口
- 安卓接口回调模板
- 模板和策略模式
- MongoDB基础(增、删、改、查)操作
- Leetcode---word Break II
- 第五周 项目1-体验常成员函数
- 第五周项目1-体验常成员函数
- Java 字符串的比较的一点体会
- Spring模板模式和回调接口
- 输出1000到200之间的闰年
- 51单片机 外部中断实验
- 将Execl中的数据导入Sqlite3中
- 欢迎使用CSDN-markdown编辑器
- 穷举算法—素数幻方
- 【每日一发】Delphi从Dll中提取自定义的资源文件
- 查看磁盘文件夹大小工具WinDirStat
- JAVA多线程和并发基础面试问答