泰安专业网站建设公司网站建设需求计划书

张小明 2026/1/19 18:59:33
泰安专业网站建设公司,网站建设需求计划书,工程建设有限公司经营范围,wordpress成品站源码文章目录一、什么是 SOLID#xff1f;二、S — 单一职责原则#xff08;SRP#xff09;定义解释反例#xff08;违反 SRP#xff09;正确做法#xff08;遵守 SRP#xff09;二、O — 开闭原则#xff08;OCP#xff09;定义解释反例正确做法#xff08;多态#xf…文章目录一、什么是 SOLID二、S — 单一职责原则SRP定义解释反例违反 SRP正确做法遵守 SRP二、O — 开闭原则OCP定义解释反例正确做法多态三、L — 里氏替换原则LSP定义解释反例经典正方形问题正确设计抽象四、I — 接口隔离原则ISP定义解释反例正确做法拆分接口五、D — 依赖倒置原则DIP定义解释反例正确做法面向接口一、什么是 SOLIDSOLID是面向对象设计中最重要的一组原则由 Robert C. MartinBob 大叔由 2000 年在论文中提出目标是让系统更易扩展、更易维护、更易理解、更少 Bug而SOLID 缩略词是稍晚由 Michael Feathers 先使用的。Bob大叔的相关著作有《代码整洁之道》和《架构整洁之道》也是大名鼎鼎。SOLID 并不是语法规则而是设计思想在实际开发和面试中都极其重要。SOLID 是 5 个设计原则首字母的缩写字母原则英文S单一职责原则Single Responsibility PrincipleO开闭原则Open–Closed PrincipleL里氏替换原则Liskov Substitution PrincipleI接口隔离原则Interface Segregation PrincipleD依赖倒置原则Dependency Inversion Principle它们共同目标降低耦合提高内聚二、S — 单一职责原则SRP定义一个类应该只有一个引起它变化的原因解释单一职责原则Single Responsibility Principle强调一个类或模块应当只承担一种职责并且只有一个引起它变化的原因。如果一个类同时负责多项功能那么其中任意一项需求的变化都可能导致类被修改从而增加系统的复杂度和出错风险。遵循单一职责原则可以让类的结构更加清晰修改影响范围更可控也更有利于代码的理解、测试和维护。也就是说一个类只负责一件事反例违反 SRPclassUserService{publicvoidregister(){// 注册逻辑}publicvoidsendEmail(){// 发送邮件}publicvoidwriteLog(){// 写日志}}问题注册邮件日志 三种职责耦合在一个类中正确做法遵守 SRPclassUserService{publicvoidregister(){System.out.println(用户注册);}}classEmailService{publicvoidsendEmail(){System.out.println(发送邮件);}}classLogService{publicvoidwriteLog(){System.out.println(写日志);}} 好处修改日志不影响注册逻辑类更清晰、更易维护二、O — 开闭原则OCP定义对扩展开放对修改关闭解释开闭原则Open–Closed Principle指出软件实体应当对扩展开放、对修改关闭。也就是说在新增功能时应该通过扩展现有代码的方式来实现而不是直接修改已经稳定运行的代码。这样可以有效降低引入新功能时对旧功能造成破坏的风险。开闭原则通常通过抽象、接口和多态来实现是构建可扩展系统的核心设计思想之一。新增功能时✅ 扩展代码❌ 不修改原有代码反例classDiscountCalculator{publicdoublecalculate(Stringtype,doubleprice){if(VIP.equals(type)){returnprice*0.8;}elseif(NORMAL.equals(type)){returnprice*0.9;}returnprice;}}问题每加一种类型都要改if-else正确做法多态interfaceDiscount{doublecalculate(doubleprice);}classVipDiscountimplementsDiscount{publicdoublecalculate(doubleprice){returnprice*0.8;}}classNormalDiscountimplementsDiscount{publicdoublecalculate(doubleprice){returnprice*0.9;}} 新增折扣类型只需新增类不改旧代码三、L — 里氏替换原则LSP定义子类必须能够替换父类而不影响程序正确性解释里氏替换原则Liskov Substitution Principle是对继承关系的约束它要求子类对象必须能够替换父类对象而不会影响程序的正确性。如果在使用父类的地方替换成子类后程序行为发生了改变或出现错误那么这种继承关系本身就是不合理的。里氏替换原则提醒我们继承不仅是代码复用更是一种行为契约子类应当遵守父类定义的语义。反例经典正方形问题classRectangle{protectedintwidth;protectedintheight;publicvoidsetWidth(intwidth){this.widthwidth;}publicvoidsetHeight(intheight){this.heightheight;}publicintarea(){returnwidth*height;}}classSquareextendsRectangle{publicvoidsetWidth(intwidth){this.widththis.heightwidth;}publicvoidsetHeight(intheight){this.widththis.heightheight;}}使用时出错RectanglernewSquare();r.setWidth(5);r.setHeight(10);System.out.println(r.area());// 100 ❌期望 50正确设计抽象interfaceShape{intarea();}classRectangleimplementsShape{privateintwidth,height;publicRectangle(intw,inth){this.widthw;this.heighth;}publicintarea(){returnwidth*height;}}classSquareimplementsShape{privateintside;publicSquare(intside){this.sideside;}publicintarea(){returnside*side;}}四、I — 接口隔离原则ISP定义客户端不应该被迫依赖它不使用的方法解释接口隔离原则Interface Segregation Principle强调应当为不同的客户端提供专门的接口而不是让所有实现类依赖一个臃肿的大接口。过于庞大的接口会迫使实现类实现它们并不需要的方法从而导致不必要的依赖和冗余代码。通过将接口拆分为更小、更具体的接口可以降低耦合度提高系统的灵活性和可维护性。反例interfaceWorker{voidwork();voideat();}classRobotimplementsWorker{publicvoidwork(){}publicvoideat(){}// ❌ 机器人不需要}正确做法拆分接口interfaceWorkable{voidwork();}interfaceEatable{voideat();}classHumanimplementsWorkable,Eatable{publicvoidwork(){}publicvoideat(){}}classRobotimplementsWorkable{publicvoidwork(){}}五、D — 依赖倒置原则DIP定义高层模块不应该依赖低层模块两者都应该依赖抽象解释依赖倒置原则Dependency Inversion Principle要求高层模块不应该依赖低层模块两者都应该依赖抽象抽象不应该依赖细节细节应该依赖抽象。该原则的核心目的是减少模块之间的直接依赖使系统更加稳定和易于扩展。通过引入接口或抽象类高层业务逻辑可以在不关心底层实现细节的情况下进行开发从而实现真正的解耦。反例classMysqlDatabase{publicvoidconnect(){System.out.println(连接 MySQL);}}classUserService{privateMysqlDatabasedbnewMysqlDatabase();}问题UserService 强依赖 MySQL正确做法面向接口interfaceDatabase{voidconnect();}classMysqlDatabaseimplementsDatabase{publicvoidconnect(){System.out.println(连接 MySQL);}}classOracleDatabaseimplementsDatabase{publicvoidconnect(){System.out.println(连接 Oracle);}}classUserService{privateDatabasedatabase;publicUserService(Databasedatabase){this.databasedatabase;}}相关参考Java基础面试题-面向对象的设计原则你知道有哪些吗
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

国外怎么做直播网站设计师导航网

温馨提示:文末有资源获取方式传统送水服务面临着效率提升与模式创新的迫切需求。一款功能完备、技术成熟且完全开放的在线订水送水小程序源码,成为了商户低成本、高效率切入线上市场,实现服务升级的关键利器。本文将为您详细介绍这样一套极具…

张小明 2026/1/12 23:02:04 网站建设

手机免费建设网站制作天元建设集团有限公司建行账号

这是一个在电子工程和信号完整性领域非常核心的问题。信号过冲(Overshoot)是指信号在跳变时(如从低到高),第一个峰值或谷值超过了最终的稳定值。 以下是详细的原因分析和解决方案。 一、过冲产生的主要原因 根本原因可…

张小明 2026/1/9 0:36:35 网站建设

开源企业网站系统php房产网哪个好

在国产数据库GBase 8s的日常运维中,“系统重启后数据库连不上"是非常典型的问题。最近我就遇到了这样的窘境:前期完成了GBase 8s的部署配置,能正常连接使用,但服务器重启后,oninit、onstat等核心命令全报"未…

张小明 2026/1/11 11:52:01 网站建设

wordpress外贸发布接口seo对网站的重要性

LobeChat与LangChain结合应用:开启复杂AI流程新篇章 在今天的企业数字化转型浪潮中,一个越来越清晰的趋势正在浮现:用户不再满足于“能回答问题”的聊天机器人,而是期待一个真正“能办事”的智能助手。想象一下,财务人…

张小明 2026/1/7 10:31:07 网站建设

一个网站是怎么建立的仙桃网站设计

大语言模型暴发以来,我见过太多公司陷入 “AI功能堆砌” 的陷阱 —— 打开产品界面,“智能助手”、“自动生成” 的按钮随处可见,但没解决客户为什么要用的价值问题。 这股以为“接入AI就赶上了时代快车”的想法,正在让SaaSAI沦为…

张小明 2026/1/1 10:51:55 网站建设

响应式网站开发的设计原则上杭网站设计

LangFlow:用节点式设计打开AI流程的“黑箱” 在构建一个智能客服机器人时,你是否曾被几十行嵌套调用的LangChain代码绕得头晕?是否因为一次提示词修改要重启整个脚本而感到烦躁?又或者,在团队会议上,产品经…

张小明 2025/12/25 9:04:23 网站建设