JAVA中Abstract到底有什么用?都用在哪些方面比较合适?
功能向上聚合
Abstract作为抽象类和抽象方法,第一种情况是在聚合子类的通用性上起到作用,往往出现在重构过程中自然而然形成的一种层次结构~希望将多个子类的通用方法和逻辑提取到父层的抽象类。
这种重构情况的最极致表现就是:若再加入新的子类,子类只需要实现抽象类的abstract方法,而且可能就只用几句话的简单声明,或者做一些属性设置就可以了,往往只是用于区分子类的特征,真正的逻辑处理实际上是在抽象类的方法内实现。这样就极大地简化了子类的代码逻辑量,实现子类层去耦合,抽象层高内聚的极佳效果
如下图所示:可以看到流水线作为一个统一的对象抽象概念,下辖了分拣、抽检、加工等子工序...,但是流水线是一个密集的工序,肯定具有大量上下文处理逻辑在里面,那么就加上一个抽象的类,交给抽象类来做,各个子工序只需要将自己份内的工序实现好就可以了。由抽象类来实现工序连接,上下文管理等,统一成为接口方法具体实现的逻辑代表。

设计模式中使用
咱们再举个例子,Java MVC框架的鼻祖Struts Framework,是由Craig R. McClanahan设计创造。我相信很多人都听说过Struts框架,其设计的Action对象都已经成为Web开发中控制的代名词。这也是最早基于JavaEE的servlet规范的WEB层框架,让老早的程序员见识到了MVC是什么样子(当然1.0并不是彻底的MVC),
好,我们看看他的一个非常简化的架构图,我们重点是说明它对Abstract的使用:

Struts1.x版本的内部使用了过滤链模式和命令模式的组合,当客户端向Servlet发起请求,那么作为Servlet的Struts实现ActionServlet就将请求调度进了Struts框架来处理。
我们可以看到图中ActionCommand作为接口抽象,ActionCommandBase作为命令链的统一入口层抽象,AbstractCreateActoin、AbstractAuthorizeAction、AbstractExectionAction作为对业务Action的创建、授权和执行(Execture)的命令抽象层,最后一层CreateAction、AuthorizeAction、ExectionAction为父类提供具体Action的实现类。另外还有选择、跳转、异常等命令,
就是以命令链条串起来的形式,从Action被创建或选择,到Action执行以及跳转的Action全生命周期管理。
那么我们从这个示例中看到了抽象(abstract)被大量的使用,主要就是通过设计模式的引入,将“业务执行(Action)”这个抽象的概念,在流程中用命令的方式进行了全生命周期的管理。那么程序员写的Action就彻底与Servlet解耦了,中间是通过Struts框架的过滤链和命令两种设计模式的操作,使得控制层彻底独立出来。备注:MVC的模型和视图不在这个架构描述当中。
因此无论是以后的Struts2.0也好,Spring MVC也好,基本上都是沿着Struts1.0的设计思想进行不断的优化。但是大体的方向在那个时候都已经成型了。唯独是面向组件的JSF标准是另一种思路了,顺便提一下,JSF的最初的规范设计还是Craig R. McClanahan操刀的。


JAVA中Abstract到底有什么用?都用在哪些方面比较合适?的更多相关文章
- 转:Java中abstract和interface的区别
转自:Java中abstract和interface的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java ...
- java中POJO类和DTO类都要实现序列化
java中POJO类和DTO类都要实现序列化 java中POJO类和DTO类都要实现序列化 java中POJO类和DTO类都要实现序列化 序列化:序列化是将对象转换为容易传输的格式的过程.例如,可以序 ...
- `Java`中`abstract class`与`interface`区别
abstract class Java中允许使用abstract修饰符声明方法,此时只定义方法但是不实现方法(abstract修饰的方法没有主体,只有一个签名和一个分号). 以下是abstract方法 ...
- Java中abstract和interface的区别
abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract class和inte ...
- Java中abstract class 和 interface 的解释和他们的异同点(转)
(一)概述 在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存 在,才赋予了Java强大的 面向对象能力.abstract ...
- java中abstract和interface的區別(轉)
(一)概述 在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存 在,才赋予了Java强大的 面向对象能力.abstract ...
- 在JAVA中线程到底起到什么作用
这是javaeye上非常经典的关于线程的帖子,写的非常通俗易懂的,适合任何读计算机的同学. 线程同步 我们可以在计算机上运行各种计算机软件程序.每一个运行的程序可能包括多个独立运行的线程(Thread ...
- JAVA中abstract,interface,final,static语法
转自:http://www.cnblogs.com/yueue/archive/2010/04/20/1715863.html 一,抽象类:abstract 1,只要有一个或一个以上抽象方法的 ...
- JAVA中线程到底起到什么作用!
这是javaeye上非常经典的关于线程的帖子,写的非常通俗易懂的,适合任何读计算机的同学. 线程同步 我们可以在计算机上运行各种计算机软件程序.每一个运行的程序可能包括多个独立运行的线程(Thread ...
随机推荐
- 手把手教你docker安装宝塔面板
手把手教你docker安装宝塔面板(针对小白提一下:需要先安装docker,安装docker的教程请自行百度,非常简单的),docker安装宝塔面板教程如下: 一.拉取centos镜像(当然这里拉取别 ...
- vue实现拖拽排序
基于vue实现列表拖拽排序的效果 在日常开发中,特别是管理端,经常会遇到要实现拖拽排序的效果:这里提供一种简单的实现方案. 此例子基于vuecli3 首先,我们先了解一下js原生拖动事件: 在拖动目标 ...
- 百度地图一套JS API,非常实用
百度地图一套JS API,非常实用 import mapStyleJson from "./mapStyleJson"; import $ from "jquery&qu ...
- 【10.5NOIP普及模拟】sort
[10.5NOIP普及模拟]sort 文章目录 [10.5NOIP普及模拟]sort 题目描述 输入 输出 输入输出样例 样例输入 样例输出 数据范围限制 解析 code 题目描述 小x和小y是好朋友 ...
- angularjs 图片上传
<input type="file" file-model="myFile"/><div class="col-md-12" ...
- 虚拟机装好centos7没网解决办法
输入ip查询命名 ip addr 也可以输入 ifconfig(centOs7没有ifconfig命令)查看ip,但此命令会出现3个条目,centos的ip地址是ens33条目中的inet值. 发现 ...
- 【笔记】《Redis设计与实现》chapter22 二进制位数组 chapter23 慢查询日志 chapter24 监视器
chapter22 二进制位数组 22.4 BITCOUNT命令的实现 遍历算法 查表算法 variable-precision SWAP算法 chapter23 慢查询日志 Redis的慢查询日志功 ...
- Spring Boot demo系列(一):Hello World
2021.2.24 更新 1 新建工程 打开IDEA选择新建工程并选择Spring Initializer: 可以在Project JDK处选择JDK版本,下一步是选择包名,语言,构建工具以及打包工具 ...
- C++ new和delete运算符得简单使用
NEW C++ 中的new运算符用来分配内存,和c语言中得malloc有相似得功能. 使用new为当个元素开辟内存空间,并返回地址 typeName *pointer_name =new typeNa ...
- kubernetes的Deployment, DaemonSet, Job 和 CronJob事例
k8s kubernetes给node节点添加标签和删除node节点标签 Deployment配置文件exampledeploymentv1.yaml apiVersion: apps/v1 kind ...