文档章节

java继承有什么用

SunnyWu
 SunnyWu
发布于 07/05 17:38
字数 501
阅读 1
收藏 0

实际在项目中用到的,一个简单的场景。

因为这个简单的修改,把原来很糟糕的代码进行了很好的重构。

好处是数据库领域模型不需要知道实际是什么组件的配置,只需要引用父类。实际这个组件配置的校验自需要放在校验层,起到解耦合的作用。

配置的父类

public class ConfigureDefinition implements Serializable {
    private final static Logger LOGGER = LoggerFactory.getLogger(ConfigureDefinition.class);
    public static String valicateErrorMessage;

    public TaskNodeDefinition addConfiguration(Object json,TaskNodeDefinition target){
        LOGGER.info("--->ConfigureDefinition addConfiguration() the [task node]<taskNode:{}>", target.toString());
        return target;
    }

    public TaskNodeDefinition processConfiguration(TaskNodeDefinition taskNodeDefinition) throws Exception{
        LOGGER.info("--->ConfigureDefinition processConfiguration() the [task node]<taskNode:{}>", taskNodeDefinition.toString());
        validate(taskNodeDefinition);
        return taskNodeDefinition;
    }

    public boolean validate(TaskNodeDefinition taskNodeDefinition) {
        LOGGER.info("--->ConfigureDefinition validate() the [task node]<taskNode:{}>", taskNodeDefinition.toString());
        return true;
    }

    public String validateReturnMessage(TaskNodeDefinition taskNodeDefinition){
        LOGGER.info("--->ConfigureDefinition validateReturnMessage() the [task node]<taskNode:{}>", taskNodeDefinition.toString());
        validate(taskNodeDefinition);
        return valicateErrorMessage;
    }

}

不同的子类有各自的业务逻辑,如果没有就使用父类的逻辑

public class HttpRequestConfig extends ConfigureDefinition {
    private final static Logger LOGGER = LoggerFactory.getLogger(HttpRequestConfig.class);


    @Override
    public TaskNodeDefinition addConfiguration(Object json,TaskNodeDefinition target){
        LOGGER.info("---> HttpRequestConfig addConfiguration() the [HTTP Request]<taskNode:{}> <{}>", target.getTaskId(),json);
        JSONObject jsonObject= JSONObject.fromObject(json);
        HttpRequestDefinition httpRequestDefinition=(HttpRequestDefinition)JSONObject.toBean(jsonObject, HttpRequestDefinition.class);
        target.setConfigure(httpRequestDefinition);
        return target;
    }

    @Override
    public TaskNodeDefinition processConfiguration(TaskNodeDefinition taskNodeDefinition) throws Exception {
        return super.processConfiguration(taskNodeDefinition);
    }

    @Override
    public boolean validate(TaskNodeDefinition taskNodeDefinition) {
        LOGGER.info("--->HttpRequestConfig validate() the [HTTP Request]<taskNode:{}>", taskNodeDefinition.toString());
        if (Objects.isNull(taskNodeDefinition.getConfigure())
                || Objects.isNull(taskNodeDefinition.getConfigure())
                || Objects.isNull(((HttpRequestDefinition)taskNodeDefinition.getConfigure()).getGeneral())
                || StringUtils.isAnyBlank(((HttpRequestDefinition)taskNodeDefinition.getConfigure()).getGeneral().getMethod(),
                ((HttpRequestDefinition)taskNodeDefinition.getConfigure()).getGeneral().getPath(),
                ((HttpRequestDefinition)taskNodeDefinition.getConfigure()).getGeneral().getAccessKeyId())) {
            valicateErrorMessage="You must specify a value in the following fields: method、path、accessKeyId";
            return false;
        }
        valicateErrorMessage=null;
        return true;
    }

    @Override
    public String validateReturnMessage(TaskNodeDefinition taskNodeDefinition){
        LOGGER.info("--->HttpRequestConfig validateReturnMessage() the [HTTP Request]<taskNode:{}>", taskNodeDefinition.toString());
        validate(taskNodeDefinition);
        return valicateErrorMessage;
    }

数据库层领域模型

public class HttpRequestDefinition extends HttpRequestConfig implements Serializable {
    private GeneralDefinition general;
    private RequestDefinition request;
    private ResponseDefinition response;

    public GeneralDefinition getGeneral() {
        return general;
    }

    public void setGeneral(GeneralDefinition general) {
        this.general = general;
    }

    public RequestDefinition getRequest() {
        return request;
    }

    public void setRequest(RequestDefinition request) {
        this.request = request;
    }

    public ResponseDefinition getResponse() {
        return response;
    }

    public void setResponse(ResponseDefinition response) {
        this.response = response;
    }
}

本文转载自:http://wuxiongwei.com/archives/java-extend

上一篇: CentOS 安装 node js
下一篇: Spring-Assert
SunnyWu
粉丝 12
博文 66
码字总数 11164
作品 0
苏州
架构师
私信 提问
115个Java面试题及回答

解释下可用的线程状态. 在执行期间, 线程会处于以下状态中的一种: Runnable: 线程已准备就绪, 但没有立即运行. Running: 处理器正在执行的线程代码. Waiting: 处于阻塞状态的线程, 等待外部某...

Yamazaki
2014/04/25
10
0
Dive Into Kotlin(四):为什么 Kotlin 的根类型是「Any?」

本文由 Prefert 发表在 ScalaCool 团队博客。 我们在Dive Into Kotlin(二):Kotlin 类型结构设计中已经对Kotlin的类型系统进行过大致的介绍。 文中提到过: 类型是 Kotlin 中 所有非空类型...

ScalaCool
2018/12/19
0
0
Java编程中那些再熟悉不过的知识点(持续更新)

本文来自于我的慕课网手记:Java编程中那些再熟悉不过的知识点,转载请保留链接 ;) 1. 面向对象和面向过程的区别 2. Java 语言有哪些特点 3. 关于 JVM JDK 和 JRE 最详细通俗的解答 4. Oracl...

小码哥的freestyle
04/11
0
0
Java 8 Lambda 表达式:模拟 Mixin 实现类的多重继承

Java 8 开始出现,带来一个全新特性:使用 Lambda 表达式 (JSR-335) 进行函数式编程。今天我们要讨论的是 Lambda 的其中一部分:虚拟扩展方法,也叫做公共辩护(defender)方法。该特性可以让你...

红薯
2012/08/15
6.9K
29
ThreadLocal 和直接new Thread ().start()有什么不同

使用ThreadLocal 和直接使用类继承Thread 而不使用Runnable 有什么不同?如下ThreadLocal使用代码 使用Thread类的代码 这两种的执行结果一致有何不同?ThreadLocal 是变量副本。但是如果我直...

红薯苗
2016/03/17
514
6

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot 操作ActiveMQ

一、消息队列中间件介绍 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题,实现高性能、高可用、可伸缩和最终一致性架构,是大型分布式系统不可缺少的...

zw965
11分钟前
2
0
本地化存储Storage

为什么会引入Storage(sessionStorage,localStorage,globalStorage) Web storage的目的是克服由cookie带来的限制,当数据需要严格控制在客户端上时,无须持续将数据发回服务器。主要是提供一...

五公里
19分钟前
5
0
Qt编写自定义控件57-直方波形图

一、前言 直方波形图控件非原创控件,控件大全中大概有20-30个控件非自己原创,而是参考了网上开源的代码,自己加以整理和完善,新增了插件的代码使得可以直接集成到QtDesigner或者QtCreator...

飞扬青云
19分钟前
2
0
或许你不知道的10条SQL技巧

这几天在写索引,想到一些有意思的TIPS,希望大家有收获。 一、一些常见的SQL实践 (1)负向条件查询不能使用索引 select * from order where status!=0 and stauts!=1 not in/not exists都不...

mskk
26分钟前
5
0
IntelliJ IDEA (Mac) 运行速度优化(JVM+localhost)

1.1. JVM 参数配置 打开 idea,菜单 –> help –> edit custom vm options,调整参数,重启即可。 具体调整参数: -Xms2g -Xmx2g -XX:ReservedCodeCacheSize=1024m -XX:+UseCompressedOops 1......

指尖Coding
35分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部