当前位置: 首页 > news >正文

凭什么要用面向对象编程(补充)

007-10-02 08:00 小菜在家中准备
小菜开始准备给人家讲座的内容,一开始都很顺利。可是当要把不同的验证方式给细化时,发现了问题。


24 原有的接口实现关系图

如果要再把是用户名密码验证,还是指纹验证的代码加进来,应该如何写具体的实现类呢?


25 SqlServer实现类改造
此时你会发现,如果要实现这个功能,你必须在你的每个实现类中写出上面的判断语句,如果某一天要增加一种数据访问(比如MySql)你就得再写一遍类似的代码,如果某天增加一个用户验证的方式(比如人脸识别验证),你就得改动所有的实现类的分支判断。这显然是让人难以接受的。

小菜决定换一种思路

26 多个类的多重继承

也就是把分支判断的语句,通过继承的方式给分解掉,这样每一种实现都体现成为一个类。只要有新的数据访问或者用户验证方式,不外乎就是增加类就可以了。应该是解决了问题。

可是,看着这张图,小菜感觉不到设计的美。如果,我们增加一种数据访问(如MySql),我们需要增加至少四个类。如果我们增加一种验证方式(如人脸识别验证),那就需要每个数据访问下都继承一个类。目前是3*3共9个类,当扩展需求来了以后,类的增加会成为一个梦魇。

难道没有办法了吗?

1)当想不出解决办法时,分析自己的代码有什么容易被改变的地方,可能找到解决思路


回到那个接口



其实当我们要增加一种验证方式时,这个Users类也是要修改的。而且对于Users类来说,验证时通常只会用到当中的一两个属性,而现实中,Users类的属性如性别、生日、姓名等等都对验证来说没有意义。此时发现,验证和用户类本身还是有区别的,验证属性其实只是用户类一小部分属性而已。对于数据库来说,我们把用户名、密码、门禁卡编号、指纹数据存到Users表里的字段中是没有问题,可在面向对象编程时,将它们混在一起的确不利于应对变化。

2)当想不出解决办法时,再次仔细分析需求,并找出需求的本质是个很好的办法

登录是为了验证用户,验证有很多种表现形式。网络上的验证通常就是用户名和密码,但随着科技的进步,指纹试别、面部试别等技术都可以成为验证用户的手段。而这一切,其本质上,验证就是抽象概念,其它都是它的实现方式。那么验证应该就是接口,那几个表现方式是它的实现类。OK,思路有了。

思路:提炼出验证接口,将不同的验证实现这个接口,将用户管理接口的登录方法聚合这个接口。


27 相对较好实现办法的类图

将验证分离成一个接口,不同的验证方式不过是验证的一种表现形式。









32 更改了原用的参数,改用验证接口

http://www.gsyq.cn/news/1644508.html

相关文章:

  • 输电线异物检测数据集725张VOC+YOLO格式
  • IEC 61332:2026《软磁铁氧体材料分类》新版深度解读
  • 到店组装一台全新台式电脑,全程到底要多久?附完整时间表与避坑指南
  • Linux DRM dma_fence实战:基于AMDGPU分析多硬件单元同步的5个关键场景
  • CPU:数字世界的核心硬件基石
  • aubo学习:控制柜
  • 重新认识C#: 玩转指针
  • Python爬虫经典案例第69篇:电商平台爬取:Amazon数据采集实战
  • 使用C++20 的协程创建通用的生成器
  • 3步解决Deforum扩展安装与使用难题:从零到动画生成的完整指南
  • 解锁免费高品质音乐:洛雪音乐音源完全指南
  • 三步搞定!国家中小学智慧教育平台电子课本下载全攻略
  • 音视频合成免费,2026音视频合成工作流,5款选型指南
  • 个人数据主权革命:WeChatMsg如何重新定义数字记忆资产管理
  • 上千本绝版中医医学类书籍大合集高清pdf
  • Floyd算法的一点讨论
  • 依赖注入与对象间关系
  • 如何在Linux上流畅运行Windows游戏:DXVK终极配置指南
  • Pot Desktop:5大核心功能解密,3分钟掌握跨平台翻译神器
  • Linux 系统中定位与设置 JAVA_HOME 目录
  • Fastboot Enhance:Windows平台一站式Android刷机工具箱,告别命令行复杂操作
  • pytest-xdist分布式测试:加速APP自动化测试的架构与实战
  • 互联网大厂 Java 面试实录:谢飞机的三轮攻防战
  • AI 已经改变工作方式,我们该怎么适应这场变化?
  • 程序员的语言“艳遇史”(四) ——数学系师姐forth
  • FastAPI 新手入门第 8 篇:让 /docs 更像一份 API 文档
  • 基于自然语言的软件工程和程序设计(中)
  • 华为防火墙Web登录配置:eNSP环境搭建与安全策略详解
  • 从 Agent Memory 到 Object-Scoped Context 的思考
  • 126、DyHead 动态检测头替换 YOLOv11 Head:Scale+Space+Task 三维注意力的实现