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

cms 官方网站有趣的编程代码

cms 官方网站,有趣的编程代码,广西网络电视,适合30岁女人的培训班设计模式-适配器模式-注册器模式 适配器模式 如果开发一个搜索中台#xff0c;需要适配或接入不同的数据源#xff0c;可能提供的方法参数和平台调用的方法参数不一致#xff0c;可以使用适配器模式 适配器模式通过封装对象将复杂的转换过程隐藏于幕后。 被封装的对象甚至…设计模式-适配器模式-注册器模式 适配器模式 如果开发一个搜索中台需要适配或接入不同的数据源可能提供的方法参数和平台调用的方法参数不一致可以使用适配器模式 适配器模式通过封装对象将复杂的转换过程隐藏于幕后。 被封装的对象甚至察觉不到适配器的存在。 例如 你可以使用一个将所有数据转换为英制单位 如英尺和英里 的适配器封装运行于米和千米单位制中的对象。 下面这段代码 postServiceuserServiceimageService分别调用的方法逻辑相同参数不同可使用接口统一调用 Component Slf4j public class SearchFacade {Resourceprivate PostService postService;Resourceprivate UserService userService;Resourceprivate ImageService imageService;ResourceThreadPoolTaskExecutor threadPoolTaskExecutor;public SearchVo searchAll(RequestBody SearchQueryRequest searchQueryRequest, HttpServletRequest httpServletRequest) {SearchVo searchVo new SearchVo();if (searchQueryRequest null) {return searchVo;}String searchText searchQueryRequest.getSearchText();String searchType searchQueryRequest.getSearchType();if (StringUtils.isBlank(searchType)) {CompletableFuturePagePostVO postTask CompletableFuture.supplyAsync(() - {PostQueryRequest postQueryRequest new PostQueryRequest();postQueryRequest.setSearchText(searchText);PagePostVO postVOPage postService.listPostVoPage(postQueryRequest, httpServletRequest);return postVOPage;}, threadPoolTaskExecutor);CompletableFuturePageUserVO userTask CompletableFuture.supplyAsync(() - {UserQueryRequest userQueryRequest new UserQueryRequest();userQueryRequest.setUserName(searchText);PageUserVO userVOPage userService.listUserVoPage(userQueryRequest);return userVOPage;}, threadPoolTaskExecutor);CompletableFuturePageImage imageTask CompletableFuture.supplyAsync(() - {ImageQueryRequest imageQueryRequest new ImageQueryRequest();imageQueryRequest.setSearchText(searchText);PageImage imagePage imageService.getImageByPage(imageQueryRequest);return imagePage;}, threadPoolTaskExecutor);CompletableFuture.allOf(postTask, userTask, imageTask);try {PagePostVO postVOPage postTask.get();searchVo.setPostList(postVOPage.getRecords());PageUserVO userVOPage userTask.get();searchVo.setUserList(userVOPage.getRecords());PageImage imagePage imageTask.get();searchVo.setImageList(imagePage.getRecords());} catch (InterruptedException | ExecutionException e) {e.printStackTrace();}} else {SearchTypeEnum searchTypeEnum SearchTypeEnum.getEnumByValue(searchType);switch (searchTypeEnum) {case POST:PostQueryRequest postQueryRequest new PostQueryRequest();postQueryRequest.setSearchText(searchText);PagePostVO postVOPage postService.listPostVoPage(postQueryRequest, httpServletRequest);searchVo.setPostList(postVOPage.getRecords());break;case USER:UserQueryRequest userQueryRequest new UserQueryRequest();userQueryRequest.setUserName(searchText);PageUserVO userVOPage userService.listUserVoPage(userQueryRequest);searchVo.setUserList(userVOPage.getRecords());break;case IMAGE:ImageQueryRequest imageQueryRequest new ImageQueryRequest();imageQueryRequest.setSearchText(searchText);PageImage imagePage imageService.getImageByPage(imageQueryRequest);searchVo.setImageList(imagePage.getRecords());break;default:break;}}return searchVo;} }下面实现一个简单的适配器 新建一个数据源接口 /*** author tuaofei* description 查询数据源* date 2024/11/29*/ public interface SearchDataSourceT {/*** 通用查询接口* param searchText* param current* param pageSize* return*/PageT doSearch(String searchText, int current, int pageSize); }postService.listPostVoPage(postQueryRequest, httpServletRequest) 新增PostDataSource数据源 Service Slf4j public class PostDataSource implements SearchDataSourcePostVO {Resourceprivate PostService postService;Overridepublic PagePostVO doSearch(String searchText, int current, int pageSize) {PostQueryRequest postQueryRequest new PostQueryRequest();postQueryRequest.setSearchText(searchText);postQueryRequest.setCurrent(current);postQueryRequest.setPageSize(pageSize);//HttpServletRequest 这里没法获取,考虑改造接口或改造方法根据具体情况判断PagePostVO postVOPage postService.listPostVoPage(postQueryRequest, null);return postVOPage;} }新增UserDataSource 数据源 userService.listUserVoPage(userQueryRequest) Service Slf4j public class UserDataSource implements SearchDataSourceUserVO {Resourceprivate UserService userService;Overridepublic PageUserVO doSearch(String searchText, int current, int pageSize) {UserQueryRequest userQueryRequest new UserQueryRequest();userQueryRequest.setUserName(searchText);PageUserVO userVOPage userService.listUserVoPage(userQueryRequest);return userVOPage;} }新增ImageDataSource 数据源 imageService.getImageByPage(imageQueryRequest) Service public class ImageDataSource implements SearchDataSourceImage {Resourceprivate ImageService imageService;Overridepublic PageImage doSearch(String searchText, int current, int pageSize) {ImageQueryRequest imageQueryRequest new ImageQueryRequest();imageQueryRequest.setSearchText(searchText);imageQueryRequest.setCurrent(current);imageQueryRequest.setPageSize(pageSize);PageImage imageByPage imageService.getImageByPage(imageQueryRequest);return imageByPage;} }修改SearchFacade里面调用service的逻辑,这样就可以统一调用相同参数的方法转换逻辑交给具体的数据源 Component Slf4j public class SearchFacade {Resourceprivate ImageDataSource imageDataSource;Resourceprivate PostDataSource postDataSource;Resourceprivate UserDataSource userDataSource;Resourceprivate ThreadPoolTaskExecutor threadPoolTaskExecutor;public SearchVo searchAll(RequestBody SearchQueryRequest searchQueryRequest, HttpServletRequest httpServletRequest) {SearchVo searchVo new SearchVo();if (searchQueryRequest null) {return searchVo;}String searchText searchQueryRequest.getSearchText();String searchType searchQueryRequest.getSearchType();int current searchQueryRequest.getCurrent();int pageSize searchQueryRequest.getPageSize();if (StringUtils.isBlank(searchType)) {CompletableFuturePagePostVO postTask CompletableFuture.supplyAsync(() - {PagePostVO postVOPage postDataSource.doSearch(searchText, current, pageSize);return postVOPage;}, threadPoolTaskExecutor);CompletableFuturePageUserVO userTask CompletableFuture.supplyAsync(() - {PageUserVO userVOPage userDataSource.doSearch(searchText, current, pageSize);return userVOPage;}, threadPoolTaskExecutor);CompletableFuturePageImage imageTask CompletableFuture.supplyAsync(() - {PageImage imagePage imageDataSource.doSearch(searchText, current, pageSize);return imagePage;}, threadPoolTaskExecutor);CompletableFuture.allOf(postTask, userTask, imageTask);try {PagePostVO postVOPage postTask.get();searchVo.setPostList(postVOPage.getRecords());PageUserVO userVOPage userTask.get();searchVo.setUserList(userVOPage.getRecords());PageImage imagePage imageTask.get();searchVo.setImageList(imagePage.getRecords());} catch (InterruptedException | ExecutionException e) {e.printStackTrace();}} else {SearchTypeEnum searchTypeEnum SearchTypeEnum.getEnumByValue(searchType);switch (searchTypeEnum) {case POST:PagePostVO postVOPage postDataSource.doSearch(searchText, current, pageSize);;searchVo.setPostList(postVOPage.getRecords());break;case USER:PageUserVO userVOPage userDataSource.doSearch(searchText, current, pageSize);searchVo.setUserList(userVOPage.getRecords());break;case IMAGE:PageImage imagePage imageDataSource.doSearch(searchText, current, pageSize);searchVo.setImageList(imagePage.getRecords());break;default:break;}}return searchVo;} }注册器模式 经过上面的修改我们发现所有的调用查询方法参数都相同而且都是通过调用实现了SearchDataSource接口的实现类来调用 我们可以简化下面的switch SearchTypeEnum searchTypeEnum SearchTypeEnum.getEnumByValue(searchType);switch (searchTypeEnum) {case POST:PagePostVO postVOPage postDataSource.doSearch(searchText, current, pageSize);;searchVo.setPostList(postVOPage.getRecords());break;case USER:PageUserVO userVOPage userDataSource.doSearch(searchText, current, pageSize);searchVo.setUserList(userVOPage.getRecords());break;case IMAGE:PageImage imagePage imageDataSource.doSearch(searchText, current, pageSize);searchVo.setImageList(imagePage.getRecords());break;default:break;}需要一个MapString,SearchDataSource来注册这些数据源通过类型来获取对应的数据源再调用查询方法 Component public class DataSourceRegistry {Resourceprivate ImageDataSource imageDataSource;Resourceprivate PostDataSource postDataSource;Resourceprivate UserDataSource userDataSource;private MapString, SearchDataSourceT dataSourceMap;/*** 在依赖注入完成后执行*/PostConstructpublic void doInit() {dataSourceMap new HashMap() {{put(SearchTypeEnum.POST.getValue(), postDataSource);put(SearchTypeEnum.USER.getValue(), userDataSource);put(SearchTypeEnum.IMAGE.getValue(), imageDataSource);}};}public SearchDataSource getDataSourceByType(String searchType) {if (dataSourceMap null) {return null;}return dataSourceMap.get(searchType);} }在SearchFacade使用 Component Slf4j public class SearchFacade {Resourceprivate DataSourceRegistry dataSourceRegistry;Resourceprivate ThreadPoolTaskExecutor threadPoolTaskExecutor;public SearchVo searchAll(RequestBody SearchQueryRequest searchQueryRequest, HttpServletRequest httpServletRequest) {SearchVo searchVo new SearchVo();if (searchQueryRequest null) {return searchVo;}String searchText searchQueryRequest.getSearchText();String searchType searchQueryRequest.getSearchType();int current searchQueryRequest.getCurrent();int pageSize searchQueryRequest.getPageSize();if (StringUtils.isBlank(searchType)) {CompletableFuturePagePostVO postTask CompletableFuture.supplyAsync(() - {SearchDataSource postDataSource dataSourceRegistry.getDataSourceByType(SearchTypeEnum.POST.getValue());PagePostVO postVOPage postDataSource.doSearch(searchText, current, pageSize);return postVOPage;}, threadPoolTaskExecutor);CompletableFuturePageUserVO userTask CompletableFuture.supplyAsync(() - {SearchDataSource userDataSource dataSourceRegistry.getDataSourceByType(SearchTypeEnum.USER.getValue());PageUserVO userVOPage userDataSource.doSearch(searchText, current, pageSize);return userVOPage;}, threadPoolTaskExecutor);CompletableFuturePageImage imageTask CompletableFuture.supplyAsync(() - {SearchDataSource imageDataSource dataSourceRegistry.getDataSourceByType(SearchTypeEnum.IMAGE.getValue());PageImage imagePage imageDataSource.doSearch(searchText, current, pageSize);return imagePage;}, threadPoolTaskExecutor);CompletableFuture.allOf(postTask, userTask, imageTask);try {PagePostVO postVOPage postTask.get();searchVo.setPostList(postVOPage.getRecords());PageUserVO userVOPage userTask.get();searchVo.setUserList(userVOPage.getRecords());PageImage imagePage imageTask.get();searchVo.setImageList(imagePage.getRecords());} catch (InterruptedException | ExecutionException e) {e.printStackTrace();}} else {SearchDataSource? dataSource dataSourceRegistry.getDataSourceByType(searchType);//可以使用公共的返回对象类型使用泛型Page? page dataSource.doSearch(searchText, current, pageSize);List? records page.getRecords();searchVo.setDataList(records);}return searchVo;} }在SearchVo新建公共返回对象 Data public class SearchVo implements Serializable {private ListPostVO postList;private ListImage imageList;private ListUserVO userList;/*** 公共返回对象*/private List? dataList; }
http://www.sczhlp.com/news/153628/

相关文章:

  • 单页网站模板修改wordpress 短代码 插件
  • 查找邮箱注册过的网站郑州网站建设专家
  • 网站被挂广告怎么办计算机软件著作权
  • pc网站手机版开发WordPress里面备份功能在哪
  • 如何做网站跳转页面怎么做让自己的网站
  • 加强农业网站建设亚马逊在电子商务网站建设
  • 网站上做的图片不清晰是怎么回事长春新建火车站
  • 怎样设计个人网站深圳优化公司高粱seo较
  • 杭州响应式网站建设大方做网站
  • 可以免费商用国外印花图案设计网站沈阳工程信息
  • 网站建设客户需求调查表360网站卖东西怎么做的
  • 中国风网站设计网站空间查询
  • 花万元请人做网站如何做网站拓扑结构图
  • 橱柜手机网站模板成都app制作开发
  • 企业网站seo外包wordpress添加弹窗
  • 聊城网站建设lckjxx襄阳市住房和城乡建设厅网站上
  • 东莞网站设计电话易利购网站怎么做
  • 基于python的网站开发网站开发大学有哪些
  • 祥云县住房和城乡建设局网站企业网站建设广州
  • 保定网站制作计划网络网站制作
  • 网站的维护和推广江阴网站网站建设
  • 同城信息商家的网站开发wordpress文章列表加广告
  • 网站改版后的推广办法惠州市网站建设企业
  • 医疗网站平台建设方案个人 服务器 linux 建网站
  • 长沙网站优化收费网站建设费用计入固定资产
  • 不同性质网站网站转载代码
  • 云浮网站建设兼职网站html代码
  • 嘉兴网站开发公司电话音乐网站的设计与开发
  • 查看网站是否收录商务网站主页设计公司
  • 济南烨铭网站建设网站开发分为