当前位置: 首页 > news >正文

餐饮商家做网站的好处合肥网站

餐饮商家做网站的好处,合肥网站,免费自助建站平台系统,施工企业突发环境事件应急预案2019独角兽企业重金招聘Python工程师标准 场景描述#xff1a; 我需要开发四个页面#xff0c;每个页面都是只涉及增删改查的基本逻辑。 最简单的写法#xff1a; 创建四个接口A,B,C,D#xff0c;每个接口中都声明了增删改查四个方法,完全一致 public Map 场景描述 我需要开发四个页面每个页面都是只涉及增删改查的基本逻辑。 最简单的写法 创建四个接口A,B,C,D每个接口中都声明了增删改查四个方法,完全一致 public MapString,Object delete(HttpServletRequest request, User user);public MapString,Object query(HttpServletRequest request, User user, MapString, Object params);public MapString,Object insert(HttpServletRequest request, User user);public MapString,Object update(HttpServletRequest request, User user); 为上面四个接口分别创建四个实现类复写接口中的增删改查方法 接口A的实现类 Override public MapString, Object delete(HttpServletRequest request, User user) {MapString,Object params new HashMapString,Object();params.put(operation, delete);return commandExecutor.execute(new DaoAImpl(request, params, user)); } Override public MapString, Object query(HttpServletRequest request, User user, MapString, Object params) {params null params ? new HashMapString,Object() : params;params.put(operation, query);return commandExecutor.execute(new DaoAImpl(request, params, user)); } Override public MapString, Object insert(HttpServletRequest request, User user) {MapString,Object params new HashMapString,Object();params.put(operation, insert);return commandExecutor.execute(new DaoAImpl(request, params, user)); } Override public MapString, Object update(HttpServletRequest request, User user) {MapString,Object params new HashMapString,Object();params.put(operation, update);return commandExecutor.execute(new DaoAImpl(request, params, user)); } 接口B的实现类 Override public MapString, Object delete(HttpServletRequest request, User user) {MapString,Object params new HashMapString,Object();params.put(operation, delete);return commandExecutor.execute(new DaoBImpl(request, params, user)); } Override public MapString, Object query(HttpServletRequest request, User user, MapString, Object params) {params null params ? new HashMapString,Object() : params;params.put(operation, query);return commandExecutor.execute(new DaoBImpl(request, params, user)); } Override public MapString, Object insert(HttpServletRequest request, User user) {MapString,Object params new HashMapString,Object();params.put(operation, insert);return commandExecutor.execute(new DaoBImpl(request, params, user)); } Override public MapString, Object update(HttpServletRequest request, User user) {MapString,Object params new HashMapString,Object();params.put(operation, update);return commandExecutor.execute(new DaoBImpl(request, params, user)); } 接口CD 的实现类就不在展示了。其中主要区别就是 ServiceAImpl调用DaoAImpl的对象 ServiceBImpl调用DaoBImpl的对象 ServiceCImpl调用DaoCImpl的对象 ServiceDImpl调用DaoDImpl的对象 看完上面的代码你可以发现重复的代码太多了需要整理下 解决方案 接口可以将增删改查的方法声明放到一个基础接口中然后继承这个基础接口就行。 基础service接口 package com.engine.odoc.service;import java.util.Map;import javax.servlet.http.HttpServletRequest;import weaver.hrm.User;public interface BaseService {public MapString,Object delete(HttpServletRequest request, User user);public MapString,Object query(HttpServletRequest request, User user, MapString, Object params);public MapString,Object insert(HttpServletRequest request, User user);public MapString,Object update(HttpServletRequest request, User user); }继承基础service接口的接口 package com.engine.odoc.service;public interface ServiceA extends BaseService {}package com.engine.odoc.service;public interface ServiceB extends BaseService {}package com.engine.odoc.service;public interface ServiceC extends BaseService {}package com.engine.odoc.service;public interface ServiceD extends BaseService {}接口的实现同样是增删改查四个复写的方法唯一不同的就是不同的实现类调用不同的持久层DAO对象。期初的想法与处理接口的想法一样把复写的增删改查方法写到一个基础service实现类中然后继承这个基础service实现类即可。 为了能实现这个功能我们需要用到Java中的泛型和反射知识 新建一个基础service实现类 package com.engine.odoc.service.impl;public class BaseServiceImplT implements BaseService {Overridepublic MapString, Object delete(HttpServletRequest request, User user) {}Overridepublic MapString, Object query(HttpServletRequest request, User user, MapString, Object params) {}Overridepublic MapString, Object insert(HttpServletRequest request, User user) {}Overridepublic MapString, Object update(HttpServletRequest request, User user) {}} 可以看到这个基础service实现类接受了一个类型参数T 那些继承了这个基础实现类的类就可以通过这个类型参数把需要调用的Dao层对象的类型传递到父类当中   package com.engine.odoc.service.impl;public class ServiceAImpl extends BaseServiceImplDaoAImpl implements ServiceA {} package com.engine.odoc.service.impl;public class ServiceBImpl extends BaseServiceImplDaoBImpl implements ServiceB {} package com.engine.odoc.service.impl;public class ServiceCImpl extends BaseServiceImplDaoCImpl implements ServiceC {} package com.engine.odoc.service.impl;public class ServiceDImpl extends BaseServiceImplDaoDImpl implements ServiceD {}   接下来我们需要思考的是如何通过这个类型参数T来得到T的一个实例。 我们先上菜 package com.engine.odoc.service.impl;import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.HashMap; import java.util.Map;import javax.servlet.http.HttpServletRequest;import com.engine.odoc.service.BaseService;public class BaseServiceImplT implements BaseService {public Class cusClass;public BaseServiceImpl() {// 获取T.classType genericSuperclass this.getClass().getGenericSuperclass();if(genericSuperclass instanceof ParameterizedType) {ParameterizedType parameterizedType (ParameterizedType) genericSuperclass;Type[] typeArray parameterizedType.getActualTypeArguments();if(null ! typeArray typeArray.length0) {cusClass (Class) typeArray[0];}}}/*** 获取T类的实例* param request* param params* param user* return*/private T getTInstance(HttpServletRequest request, MapString,Object params, User user) {try {return (T) cusClass.getConstructor(new Class[]{HttpServletRequest.class, Map.class, User.class}).newInstance(request, params, user);} catch (Exception e) {e.printStackTrace();}return null;}Overridepublic MapString, Object delete(HttpServletRequest request, User user) {}Overridepublic MapString, Object query(HttpServletRequest request, User user, MapString, Object params) {}Overridepublic MapString, Object insert(HttpServletRequest request, User user) {}Overridepublic MapString, Object update(HttpServletRequest request, User user) {}}我们可以看到我们在这个基础service实现类的默认构造函数中确认了类型参数T的类型得到T.class。之后在getTInstance() 方法中通过反射的方式获取了T的实例。   Type genericSuperclass this.getClass().getGenericSuperclass();         这行代码我们是写在父类BaseServiceImpl的默认构造函数中的。继承这个类的子类们在执行默认构造函数的时候会先执行super();调用父类的默认构造函数这时候以上这行代码中的this就代表了子类调用getGenericSuperclass()来获得父类BaseServiceImpl而得到的父类BaseServiceImpl可能是BaseServiceImplDaoAImpl,BaseServiceImplDaoBImpl... ,也可能BaseServiceImplT。 我们可以使用接口ParameterizedType用来检验类型参数是否被参数化 Type genericSuperclass this.getClass().getGenericSuperclass(); if(genericSuperclass instanceof ParameterizedType) {// 该泛型类的类型参数已经被参数化 } 如果类型参数已经被参数化我们就可以通过调用下面的方法 package java.lang.reflect;public interface ParameterizedType extends Type {Type[] getActualTypeArguments(); } 返回的数组中就存储了类型参数T的具体类型即T.class   获取到T.class之后,我们就可以通过反射来进一步获得T的实例 try {return (T) cusClass.getConstructor(new Class[]{HttpServletRequest.class, Map.class, User.class}).newInstance(request, params, user); } catch (Exception e) {e.printStackTrace(); }         转载于:https://my.oschina.net/u/3229807/blog/1821207
http://wiki.neutronadmin.com/news/228894/

相关文章:

  • 一个做外汇的网站叫熊猫什么的素材网免费
  • 机械网站怎么做discuz 转 wordpress
  • 消费者联盟网站怎么做一站式免费建站平台
  • 山东济南城乡建设厅网站wordpress 注册不了
  • 网站建设煊煊网网站开发我能做什么
  • 营销网站建站公司wordpress在线时间代码
  • 网站app生成软件开封到濮阳
  • 制作视频网站建设包头seo推广哪家专业
  • 杭州建设网 工程信息网站wordpress如何抓取
  • 做网站资质荣誉用的图片公司做的网站如何开启伪静态
  • 网站如何防止别人抄袭易语言如何做网站登录
  • 网站建设用什么软件做浏览器下载安装2023最新版
  • 做网站必须要购买空间吗网站后台修改网站首页怎么做
  • 网站优化排名教程河南项目备案信息网
  • 沈阳建站模板wordpress贝宝插件
  • 温州本地网站平台做盗版网站违法吗
  • 网站建设需要准备什么软件个人博客wordpress
  • seo如何根据网站数据做报表河南企业做网站
  • 网站开发实例社区学校 网站建设招聘
  • 网站的建设方面广州财税公司排行榜
  • 网站建设需求分析流程图wordpress 获取插件目录下
  • 汕头网站建设推广交换链接网站
  • 网站建设会计分录怎么写WordPress数字销售源码
  • 富顺做网站个人做网站可以吗
  • 哈尔滨手机网站建设报价wordpress图设置方法
  • 网络小程序开发公司网站优化就是搜索引擎优化
  • 嘉兴建网站吴江和城乡建设局网站
  • 哈尔滨市营商环境建设监督局网站网站开发建设是否需要经营许可
  • 扁平化网站psd商标设计在线
  • 做照片模板下载网站好南京建设网站内容