下程序模板-java程序员模板设计模式真的有必要掌握下,冗余代码一扫光

程序王公司项目实际代码中最常用的设计模式是模板设计模式。

让我们用具体的代码示例来展示模板设计模式的强大和优雅。

哪些场景可以使用模板模式?

<dependency>    <groupId>com.google.guava</groupId>    <artifactId>guava</artifactId>    <version>17.0</version></dependency>

代码目录

import com.google.common.base.Stopwatch;import designpattern.template.exception.BizRuntimeException;import java.util.concurrent.TimeUnit;

核心模板类型

这里用到的知识点是

这个模板类就是所谓的骨架

固定的处理逻辑写在这里

下程序模板_模板下载软件_模板下载什么意思

子类(即留下哪个接口供扩展)

BizHandle接口可以根据您业务的具体情况进行添加或删除。

public class CxwBizTemplate {
public RES process(RES result,                 REQ request,                 BizHandle bizHandle) Stopwatch stopWatch=Stopwatch.createStarted(); try{ bizHandle.preHandle(); bizHandle.handle(); }catch (BizRuntimeException e){ //把自定义的异常码封装 result } catch (Exception e){ bizHandle.handleException(e,result); System.out.println(e.getMessage()); }finally { //记录性能日志或统一处理 result System.out.println(bizHandle.desc()+" 耗时:" +stopWatch.elapsed(TimeUnit.SECONDS)); } return null; }
public interface BizHandle<RES>{        //前置处理 void preHandle();        //具体逻辑 void handle();        //功能描述 String desc();        //异常处理 void handleException(Throwable e,RES result); }}

以下是请求对象和返回结果对象,

下程序模板_模板下载软件_模板下载什么意思

程序王公司项目一般都会封装一个基类

然后子类继承

一般来说,公司的基类以Base开头命名。

特别注意的是,结果基类一般都会设计有异常代码和异常描述。

请求基类一般都有requestId,用于幂等控制。

模板下载软件_下程序模板_模板下载什么意思


class BaseRequest{ private String requestId; private String name; public String getRequestId() { return requestId; }
public void setRequestId(String requestId) { this.requestId = requestId; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }};
//异常码定义在基类class BaseResult{
private String errorDesc; private String errorCode; public String getErrorDesc() { return errorDesc; }
public void setErrorDesc(String errorDesc) { this.errorDesc = errorDesc; }
public String getErrorCode() { return errorCode; }
public void setErrorCode(String errorCode) { this.errorCode = errorCode; }};

客户端调用代码

import com.google.common.base.Preconditions;public class CxwCustomer {
public static void main(String[] args) { CxwCustomer cxwCustomer=new CxwCustomer(); BaseRequest request=new BaseRequest(); cxwCustomer.query(request); }
public BaseResult query(BaseRequest request){ BaseResult result=new BaseResult(); CxwBizTemplate cxwBizTemplate=new CxwBizTemplate();        cxwBizTemplate.process(result, request, new CxwBizTemplate.BizHandle() { @Override public void preHandle() { Preconditions.checkNotNull(request, "request参数空"); Preconditions.checkNotNull(request.getName(), "request name参数空"); Preconditions.checkNotNull(request.getRequestId(), "request RequestId参数空"); } @Override public void handle() { //TODO 你的业务代码 } @Override public String desc() { return "程序汪查询功能"; }
@Override public void handleException(Throwable e, BaseResult result) { result.setErrorDesc("程序汪查询异常"); } }); return null; }}

总结

使用场景

下程序模板_模板下载什么意思_模板下载软件

如果您和王程序有深入交流下程序模板下程序模板,可以去知识星球

王程序往年精彩文章有答案

(面试题推荐目录)

给个[在看],是对程序汪最大的支持

预览期间无法单击标签