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 ...
随机推荐
- 【死磕JVM】一道面试题引发的“栈帧”!!!
前言 最近小农的朋友--小勇在找工作,开年来金三银四,都想跳一跳,找个踏(gao)实(xin)点的工作,这不小勇也去面试了,不得不说,现在面试,各种底层各种原理,层出不穷,小勇就遇上了这么一道面试题, ...
- java中的String,StringBuffer与StringBuilder
String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁. StringBuffer对象则代表一个字符序列可变的字符串,当一个Stri ...
- java例题_18 乒乓球比赛(对手问题)
1 /*18 [程序 18 乒乓球赛] 2 题目:两个乒乓球队进行比赛,各出三人.甲队为 a,b,c 三人,乙队为 x,y,z 三人.已抽签决定比赛名单. 3 有人向队员打听比赛的名单.a说他不和 x ...
- IT培训有哪些坑(三)?
我们继续来说说IT培训的坑,今天讲的这点,非常重要,几乎适合于所有层面的培训,不仅仅是IT行业.近期有参加各种培训打算的,包括各种营销培训,管理培训等等,都是有用的. 有大企业,名人背景的不靠谱.不要 ...
- CDN域名解析问题
CDN域名解析问题 之前配置CDN域名解析,碰到一个配置带www的域名和不带www的域名,这里就有个解析的坑,已经将cdn域名都配置好的,但是一直访问不了,白屏现象 后面排除源站问题和cdn配置问题, ...
- 批量SSH key-gen无密码登陆认证脚本 附件脚本
# 批量实现SSH无密码登陆认证脚本 ## 问题背景 使用为了让linux之间使用ssh不需要密码,可以采用了数字签名RSA或者DSA来完成.主要使用ssh-key-gen实现. 1.通过 ssh-k ...
- Vulkan移植GpuImage(三)从A到C的滤镜
前面移植了几个比较复杂的效果后,算是确认了复杂滤镜不会对框架造成比较大的改动,开始从头移植,现已把A到C的所有滤镜用vulkan的ComputeShader实现了,讲一些其中实现的过程. Averag ...
- Java(114-132)【Scanner类、Random类、ArrayList类】
1.API概述和使用步骤 应用程序编程接口.Java的API是一本程序员的字典,学会查询 2.Scanner 概述及其API文档 键盘输入 类都是大写的Scanner,关键字是小写的public 3. ...
- 2020.1 IDEA 激活
1 下载安装 平台windows,官网这里. 选位置之后: 选项分别是创建32/64位的快捷方式,把运行目录添加到PATH环境变量,添加右键菜单"打开文件夹作为工程",添加java ...
- Java 基础 一文搞懂泛型
本文将从以下四个方面来系统的讲解一下泛型,基本上涵盖了泛型的主体内容. 什么是泛型? 为什么要使用泛型? 如何使用泛型? 泛型的特性 1. 什么是泛型? 泛型的英文是Generics,是指在定义方法. ...