Understand Abstraction and Interface

Foreword

抽象和接口是Java中的两个关键字,也是两种最基本的优化软件项目手段。为什么说它们是一种优化项目的手段?

人分三六九等,不同等级的人,所接触的事和处理的事是不一样的。同理,项目也分大项目和中项目和小项目,大、中、小项目所承载的目标也是不一样的。

先说小项目,如果你使用Java只是写一个小脚本,比如更新一下系统时间,自动点击某个软件按钮,修改表格数据...类似这样的功能。对于这种小项目,项目里无非三、两个功能函数,有个Main按照顺序调用一下即可,那么这种项目就永远都不需要使用到抽象和接口。用了反而是累赘,有画蛇添足的味道。

但是对于大项目就不同了,比如一个大型的电商系统,用户的需求多、使用人群广、数据类型多且需要一定关联度。商品种类多、店铺的类型各异...,当然这些都是在系统设计阶段的麻烦。在开发阶段的麻烦是,不同项目组的人都做不同的模块,一个项目组的人怎么配合也是麻烦,最后数据对接起来也是麻烦、前后端之间的数据对接...,怎么样,想想都头疼了吧。

为什么说有了抽象和接口,能给大型项目带来便利、优化?

Abstraction and Interface

一些前人留下了一些经典的设计模式,比如单一模式,指在设计的时候要保证类的单一功能,如果完全按照这种模式,那么业务的实现会变成无数个类,并且代码间非常耦合,在修改业务需求和代码的时候,都是一场灾难。

接口则是解耦的最基本工具,接口允许将方法的定义与其实现分开,这种分离使得多个不相关的类能够实现同一组方法,从而保证了项目中不同部分之间的相互通信。

抽象类非常适合多个子类共享共同特征和属性,但也兼容自己独有的行为情况,同时为子类的定制实现留出空间。

这个现象让我想到对有序数组的排序:

就类似对有序数组进行排序,使用冒泡排序和二分查找算法去实现,虽然都能完成这个效果。但是它们的时间复杂度差异也很大,差了一个数量级。

  • 冒泡排序的时间复杂度为O(n);
  • 二分查找的时间复杂度为O(logn);

同样的,你不使用抽象和对象也一样能实现大型项目,但是效果不一样,在管理的复杂度上也不一样。

如果说冒泡和二分体现的差异在时间和空间上。那么设计不合理的项目,就体现在在代码的工作量上。

当然,项目中增加了抽象和接口,新人的理解难度也直线上升,这也逼迫这个项目的程序员都必须得安装OOP思想,才能上手这种项目。

相关推荐
FAREWELL000752 天前
C#核心学习(二)面向对象——封装(1)成员变量与成员方法
学习·c#·面向对象·oop·成员变量和成员方法
FAREWELL000753 天前
C#核心学习(一)面向过程与面向对象编程---初识类和对象
学习·c#·面向对象
FreakStudio3 天前
一文速通 Python 并行计算:05 Python 多线程编程-线程的定时运行
单片机·嵌入式·多线程·面向对象·并行计算·电子diy
FreakStudio6 天前
一文速通Python并行计算:04 Python多线程编程-多线程同步(上)—基于条件变量、事件和屏障
python·嵌入式·开发工具·面向对象·线程同步·代码阅读·电子diy
FreakStudio7 天前
一文速通Python并行计算:03 Python多线程编程-多线程同步(上)—基于互斥锁、递归锁和信号量
python·嵌入式·多线程·面向对象·并行计算·线程同步·电子diy
郝YH是人间理想8 天前
Python面向对象
开发语言·python·面向对象
FreakStudio10 天前
一文速通Python并行计算:01 Python多线程编程-基本概念、切换流程、GIL锁机制和生产者与消费者模型
python·嵌入式·多线程·面向对象·并行计算·电子diy
FreakStudio13 天前
一文速通Python并行计算:00 并行计算的基本概念
python·嵌入式·面向对象·电子diy
Trouvaille ~18 天前
【Java篇】一法不变,万象归一:方法封装与递归的思想之道
java·开发语言·面向对象·javase·递归·方法·基础入门
Trouvaille ~24 天前
【Java篇】数据类型与变量:窥见程序的天地万象
java·开发语言·青少年编程·面向对象·数据类型·基础知识·入门必看