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

网站建设是设计师吗公众号的制作方法和步骤

网站建设是设计师吗,公众号的制作方法和步骤,石岩医院网站建设,自媒体平台app下载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://www.yutouwan.com/news/206159/

相关文章:

  • 合肥 网站设计wordpress 端口映射
  • 网站备案 自己的服务器家庭装修效果图大全2021图片
  • 个人网站导航模版seo教学网seo
  • 电商网站订烟网站平台建设包括哪些
  • 福安网站开发成都网站建设公司优势
  • 济南网站建设优化网站建设公司怎么推广
  • 网站服务器试用市场推广怎么写
  • 建材网站建设 南宁房产证
  • 专门帮忙做网站的公司河南工程建设信息网查
  • 如何做电影网站资源手机笑话网站源码
  • html网站开发案例网页编辑排版
  • 点样做网站自助建站教程
  • 免费1级做看网站网站设计建设维护
  • 大连网站设计菲尔莱斯哪家公司做网站便宜
  • 长沙企业建网站网站设计科技有限公司
  • 福州服务类网站建设西安it培训机构
  • 山西临汾建设局网站建筑模板规格尺寸
  • 贵阳网站设计报价苏州住建局官网平台
  • 合肥效果好的网站推广网站制作 杭州公司
  • 网站建设先航科技24小时妇科免费问医生
  • 商城网站建设合同书点击一个网站跳转到图片怎么做
  • 淄博市住房和城乡建设厅网站上海哪里做网站好
  • 建设网站需要多少时间襄阳seo公司
  • 网页广告怎么投放吉林网络营销方式优化
  • 网站开发8080无法访问此页面企业网站如何做微信营销
  • 培训如何优化网站wordpress 首页静态化
  • 网站建设属于什么费用网站开发 前端 外包
  • 鄂州市住房和城乡建设部网站采购网站模板
  • 金融行业seo整站优化做农产品网站
  • 外贸公司网站网站创建风格