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 ...
随机推荐
- go中sync.Mutex源码解读
互斥锁 前言 什么是sync.Mutex 分析下源码 Lock 位运算 Unlock 总结 参考 互斥锁 前言 本次的代码是基于go version go1.13.15 darwin/amd64 什么 ...
- Line-line Intersection Gym - 102220C
题目链接:https://vjudge.net/problem/Gym-102220C 题意:求n 条直线两两相交有几对(也可以重合). 思路:用map和pair存所有直线的斜率和与X轴的交点,假设与 ...
- B. Johnny and Grandmaster
原题链接:https://codeforc.es/problemset/problem/1361/B 题意:给你n个k求把pk分成两组数和的最小差值对1e9+7取余. 题解:运用贪心的思想取最大的数减 ...
- 《逆向工程核心原理》——DLL注入与卸载
利用CreateRemoteThread #include <iostream> #include <tchar.h> #include <Windows.h> # ...
- java例题_07 字符串的处理
1 /*7 [程序 7 处理字符串] 2 题目:输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. 3 程分析:利用 while 语句,条件为输入的字符不为'\n'. 4 */ 5 6 ...
- pwn题命令行解题脚本
目录 脚本说明 脚本内容 使用 使用示例 参考与引用 脚本说明 这是专门为本地调试与远程答题准备的脚本,依靠命令行参数进行控制. 本脚本支持的功能有: 本地调试 开启tmux调试 设置gdb断点,支持 ...
- for what? while 与 until 差在哪?-- Shell十三问<第十三问>
for what? while 与 until 差在哪?-- Shell十三问<第十三问> 最后要介绍的是 shell script 设计中常见的"循环"(loop). ...
- Recoil 默认值及数据级联的使用
Recoil 中默认值及数据间的依赖 通过 Atom 可方便地设置数据的默认值, const fontSizeState = atom({ key: 'fontSizeState', default: ...
- CVE-2021-21402 Jellyfin任意文件读取
CVE-2021-21402 Jellyfin任意文件读取 漏洞简介 jellyfin 是一个自由的软件媒体系统,用于控制和管理媒体和流媒体.它是 emby 和 plex 的替代品,它通过多个应用程序 ...
- Apache Hudi 0.8.0版本重磅发布
1. 重点特性 1.1 Flink集成 自从Hudi 0.7.0版本支持Flink写入后,Hudi社区又进一步完善了Flink和Hudi的集成.包括重新设计性能更好.扩展性更好.基于Flink状态索引 ...