Java分析和提取公共类的方法

一、 概述:

本文主要从公共类或方法的设计原则开始,以现有类的公共方法或逻辑的提取为主线逐步展开说明,针对于项目中多处重复的代码或某一特定场景处理相对分散的情况进行分析,对其进行提取公共类处理,提高代码的效率、可读性和复用性。借此阐述提取公共类的意义和方法,达到优化代码逻辑和工程结构的目的。

二、 设计基本原则和使用场景:

1、 设计基本原则:

向上抽取共性,尽可能的包含子类的共性,这样就可以更方便的进行代码维护。

2、 使用场景:

1) 同时获取多个对象且对象的成员变量定义相同较多的;

2) 多个实体对象的成员变量相似度较高;

3、 特殊情况:

方法功能与声明均相同,但方法功能主体不同。这时也可以抽取,但只抽取方法声明,不能抽取方法主体,此方法就是一个抽象方法。

三、 提取场景的分析:

1、 提取公共方法:

1) 提取方法:

a) 公共方法将特有的东西提取为需要传入的参数;

b) 不需要传入任何参数,直接使用的方法;

c) 公共类属性的泛型化;

2) 注意事项:

a) 所有的方法都能做成公共的方法,只是根据使用频率决定是否必要;

b) 方法完全独立,所做的事情与外界无关,仅是一个使用的工具,来完成某件事情;

2、 提取工具类:

1) 抽取工具类:

明确输入参数和返回值的类型,并根据此要求创建方法。

2) 工具类的调用:

a) 普通类:

可使用new方式进行对象的创建,并通过调用对象的方法实现功能;

b) 工具类:

可使用类名称直接(类名称+方法名称的方式)调用方法实现功能。

3) 注意事项:

a) 尽量不要在工具类的方法中频繁地创建对象,可将部分对象的创建过程写到类中方法外;

b) 在声明为静态的方法(使用static修饰的方法)中调用的对象均需要创建为静态的,即使用static修饰相关的对象;

3、 实体对象类的提取:

1) 注意事项:

a) 对象成员变量的访问权限应定义public或protected;

b) 实体对象抽取基类时,基类应尽量避免存在有对应的表(hibernate映射时,先对父类进行初始化,再对子类进行初始化,导致父类的配置文件加载混乱),同时增加标识子类的成员变量;

c) 实体对象BO抽取基类时,要增加返回值为List和List extends 父类>的方法;

四、 案例分析:

1、 类图:




java 公共方法抽取 java中怎么抽取公共方法_子类

PowerDesigner类图



2、 部分对象说明:

1) Person:

a) 说明:

i. 实体对象公共类;

ii. 抽取出来的子类共性属性;

iii. 增加classId变量用于区分具体的子类对象;

iv. 增加CUID(主键字段)的无参数set方法(空实现方法,子类需重写生成自己的唯一标识);

b) 示例代码:




java 公共方法抽取 java中怎么抽取公共方法_示例代码_02

Person



2) IPersonBO:

a) 说明:

实体对象公共处理统一接口;

b) 示例代码:




java 公共方法抽取 java中怎么抽取公共方法_数据_03

IPersonBO



3) Student:

a) 说明:

实体对象类继承公共类,重写公共类的get/set方法,classId只重写set方法,重写CUID(主键字段)的无参数set方法;

b) 示例代码:




java 公共方法抽取 java中怎么抽取公共方法_数据_04

Student



4) IStudentBO:

a) 说明:

实体对象处理接口;

b) 示例代码:




java 公共方法抽取 java中怎么抽取公共方法_子类_05

IStudentBO



5) StudentBO:

a) 说明:

实体对象处理类,同时实现IPersonBO和IStudentBO这两个接口;

b) 示例代码:




java 公共方法抽取 java中怎么抽取公共方法_java 公共方法抽取_06

StudentBO



五、 实际案例分析:

1、 场景展示:




java 公共方法抽取 java中怎么抽取公共方法_java 公共方法抽取_07

实际案例分析-购物清单的数据提取



2、 场景说明:

分析购物清单的产生过程,对购物清单的数据进行提取;

3、 提取步骤分析:

1) 数据汇总:

对购物小票中的明细进行数据汇总,生成购物清单表格;

2) 数据分析:

根据对购物清单表格的分析,将商品进行分类处理;

3) 数据提取:

根据商品进行分类情况,提取出商品类(商品类是各种商品分类的基类,商品分类是商品详情的基类)和清单类;

4) 数据生成:

通过商品类和清单类实例对象的数据组合,对购物小票或购物清单表格进行快速的数据生成,用于结算机台显示或客户留存;