以前写的代码 :
import java.io.*;
import javax.swing.*;
public class CopyFileUtil {
/**
* 文档内容复制
*/
private static void getData(String sourceFileName,
String destinationFileName) {
// 文件复制
int i;
BufferedInputStream input = null;// 读取
BufferedOutputStream output = null;// 写出
try {
input = new BufferedInputStream(new FileInputStream(sourceFileName));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
output = new BufferedOutputStream(new FileOutputStream(
destinationFileName));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
while ((i = input.read()) != -1) {
output.write(i);
}
input.close();
output.flush();
output.close();
} catch (IOException e) {
e.printStackTrace();
}}
/**
* 判断目的文件是否存在
*/
private static boolean isDestinationPathExist(String destinationFilePath,
boolean isOverwrite) {
File destinationFile = new File(destinationFilePath);
if (destinationFile.exists()) {
// 如果目标文件存在并不可以覆盖
if (isOverwrite == false) {
return false;
}
} else {// 如果目标文件所在的目录不存在且创建目标不成功
if (!destinationFile.getParentFile().exists()) {
if (!destinationFile.getParentFile().mkdirs() == true) {return false;
}}}return true;
}
/**
* 判断源文件是否存在
*/
private static boolean isSourcePathExist(String sourceFileName) {
File sourceFile = new File(sourceFileName);
if (!sourceFile.exists()) {
return false;
}return true;}
/**
* 复制文件
*/
public static void copyFile(String sourcePath, String destinationPath,boolean isOverwrite) {
File _sourceFile = new File(sourcePath);
// 获得文件下面所以子文件
File[] listFile = _sourceFile.listFiles();
for (int i = 0; i < listFile.length; i++) {
if (listFile[i].isFile()) {// 如果是真实文件,复制文件内容
getData(listFile[i].getAbsolutePath(), destinationPath+ File.separator + listFile[i].getName());
} else if (listFile[i].isDirectory()) {
// 如果是文件夹,就先创建这个文件夹
String DirectoryPath = destinationPath + File.separator+ listFile[i].getName();
File DirectoryFile = new File(DirectoryPath);
DirectoryFile.mkdirs();
// 递归循环
CopyFileUtil.copyFile(listFile[i].getAbsolutePath(),
DirectoryPath, isOverwrite);
}}}}
感悟接口、抽象类 的优越性后重构:
一、以前代码局限性分析
上面这些代码,自己其实不是没想过搞一点面向对象的思想来指导自己的编码,主要是当自己能把功能实现的时候已经很不错了,还管它面向什么。不能一直这样下去,自己试着以
面向对象的思想去发现以前写的代码一些缺点:
a.
扩展性差 :很难再在个类里面加入些了
b.
重用性差: 看上去根本没什么可好重用的代码段
c.
耦合度高:方法之间的调用比较凌乱
二、重构代码分析
自己首先拿一只笔再纸上分析文件的复制整个流程步骤:
a. 文件复制首先要有存在被复制的文件即“源文件”和要复制到哪里去 即“目标文件” 是 否存在的问题
b.文件类型的问题:是文档文件,还是一个文件夹
c. 文件复制:如果是文档文件就直接复制文档内容,如果是文件夹不仅要复制里面问档内容,还有一些只文件夹复制
经过上面的分析不难发现 可以把这个类写的更有层次结构化一些:
首先,可以将 文件是否存在的判断单独的写一个类或者定义它为
接口
其次,在文件夹的复制时要用到文档的复制,这样就容易想到将文件夹的复制作为“
子类”来
继承“
父类”文档的复制。
最后,根据“面向对象”的思想考虑将可以将其中的某个类写成“
抽象类”
三、再分析代码的优越性
a.
扩展性:
定义的抽象类中可进行扩展,继承它的子类也可以进行扩展 这不仅是一个文件复制的实现了,如果在进行文件“压缩”“加密”等等都很容易实现。而且不感到杂乱!
b.
重用性:
基本上没个模块都可以单独的划分开,每个类都可以重用
c.
耦合性:
类与类的关系明确,继承结构清晰,不同类直接方法调用少。
可以将整个包进行封装 ,如果要复制的时候只要传入 “源文件路径”“目标文件路径”即可。
四、自己关于
面向对象的一点点看法:
我觉得面向对象主要就是把抽象的事物通过“
抽象类”具体化后,再进行操作,具体化后的事物都具备抽象的功能,通过
封装 、
接口这样就能够最大化的体现重用,当然具体化后的东西可以更改操作的内部实现,比如通过
继承这样就能够体现出
多态性......
说起来好像是那么回事,但是自己用起来就难,希望在以后的敲代码之前多注意下,试着能够尽量的体现下
面向对象吧
- 大小: 50.8 KB
- 大小: 19.8 KB
- 大小: 13.9 KB
- 大小: 30.9 KB
分享到:
相关推荐
相空间重构C-C法,含数据 。。
重构----改善既有代码的设计 怎么写好一个类,怎么重构已有代码,运用多中重构代码的方法,去改善代码结构。
重构----改善既有代码的设计(完整中文扫描版PDF),精彩不容错过。
在重构过程中,避免对已发布的接口进行重大修改,以确保对现有系统的兼容性。 总的来说,《重构》提供的是一套系统化的代码改进方法论,强调通过小步快跑的方式,持续改进软件质量,降低维护成本,提高开发效率。...
重构---改善既有代码的设计。Java程序员必读书籍之一。
本次重构的主题是创建一个快速读写XML文件的工具类,这在处理数据存储和交换时非常常见。XML(eXtensible Markup Language)是一种结构化数据格式,广泛应用于配置文件、数据传输和数据存储等领域。 在描述中提到的...
### 重构(1-6).pdf 知识点解析 #### 标题解析 - **重构(1-6).pdf**:此标题表明文档主要涵盖了重构技术的基础与实践指南,特别是第一章至第六章的内容。 #### 描述解析 - **重构(1-6).pdf 1-6章**:这一描述明确...
本书讲述重构,即在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。
重构与模式-中文扫描版http://product.china-pub.com/32561
疫后新格局:从重启到重构-20210209-中金公司-16页.pdf
6. **重构过大类**:将GameUI的功能分解为多个专门的类,如QuestionFactory和ResultEvaluator,以减少类的职责和大小。 7. **优化参数列表**:对于DataOperate类的addQuestion和addGame等方法,可以考虑使用对象...
无人机编队重构_UAVs-Reconfiguration
"应用MATLAB实现连续信号的采样与重构仿真" MATLAB 是一款功能强大且广泛应用于工程领域的软件工具,MATLAB 的应用范围非常广泛,包括信号处理、图像处理、控制系统、机器学习等领域。该课程设计主要介绍了使用 ...
复现重构光谱算法-matlab算法文档含源码
本下例是讲解工厂模式 多态 接口 抽象 重构的经典下例子,结合一个尽可能简洁的实例来说明OOD、设计模式及重构。通过下面的代码,详细地阐述面向对象设计思想。体现了软件工程的三个主要目标:重用性、灵活性和扩展...
088 配电网重构matlab.含sop配电网重构 故障6-7 yalmip 二阶锥
新消费行业专题分析报告:2022,“新消费”重构再出发-国金证券-20220110.pdf
人口要素与产业趋势系列:家庭小型化、逆小型化与消费场景重构-0602-华泰证券-21页.pdf