Understand Abstraction and Interface

Foreword

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

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

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

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

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

Abstraction and Interface

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

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

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

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

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

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

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

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

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

相关推荐
FreakStudio4 天前
亲测可用!可本地部署的 MicroPython 开源仿真器
python·单片机·嵌入式·面向对象·并行计算·电子diy·电子计算机
FreakStudio6 天前
和做工厂系统的印尼老哥,复刻了一套属于 MicroPython 的包管理系统
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
书到用时方恨少!8 天前
Python 面向对象进阶:多态——同一个接口,千种面孔
开发语言·python·多态·面向对象
Irene19918 天前
Python 面向对象总结:对比 JavaScript 的面向对象
javascript·python·面向对象
FreakStudio9 天前
做了个Claude Code CLI 电子宠物:程序员的实体监工代码搭子
python·单片机·嵌入式·面向对象·并行计算·电子diy·电子计算机
不会编程的懒洋洋9 天前
C# Task async/await CancellationToken
笔记·c#·线程·面向对象·task·同步异步
FreakStudio11 天前
无硬件学LVGL—定时器篇:基于Web模拟器+MicroPython速通GUI开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
FreakStudio13 天前
无硬件学LVGL:基于Web模拟器+MiroPython速通GUI开发—布局与空间管理篇
python·单片机·嵌入式·面向对象·并行计算·电子diy
来自远方的老作者14 天前
第10章 面向对象-10.2类和对象
python·面向对象·类和对象·hasattr函数·setattr函数·getattr函数
耿雨飞14 天前
Python 后端开发技术博客专栏 | 第 03 篇 面向对象编程进阶 -- 从 SOLID 原则到 Python 特色 OOP
开发语言·python·面向对象·oop