面向对象程序设计原则

好的,今天我们用“人话”来聊聊面向对象设计的七大原则。这些原则就像是编程界的“武林秘籍”,掌握了它们,你的代码会变得更灵活、更易维护,还能少踩很多坑!


1. 单一职责原则(SRP)——一个萝卜一个坑

核心思想:一个类只干一件事,别让它身兼数职。
举个栗子🌰
假设你有个“交通工具”类,它既负责汽车在公路上跑,又让飞机在天上飞,还让轮船在水里游。这样一旦要修改飞机的飞行逻辑,可能连汽车和轮船的代码都得改,容易出问题。
正确做法:拆!把汽车、飞机、轮船各自独立成类,每个类只管自己的“运动方式”。
好处:代码更清晰,改一个功能不会“牵一发而动全身”。


2. 开闭原则(OCP)——支持扩展,拒绝修改

核心思想:软件要对新功能开放(扩展),但对旧代码关闭(不改动)。
举个栗子🌰
比如你要画图形,最初只能画圆形和矩形。如果直接在每个地方写if(type==圆形)… else if(type==矩形)…,新增三角形时就得改一堆代码。
正确做法:用抽象(接口或父类)定义“图形”,所有具体图形继承它。新增三角形时,只需写新类,原有代码完全不动。
好处:加新功能就像“插拔U盘”,即插即用,不影响其他部分。


3. 里氏替换原则(LSP)——儿子要像爹

核心思想:子类必须能替代父类,且不破坏原有逻辑。
举个栗子🌰
如果“鸟”类有个fly()方法,企鹅继承了这个类却不会飞,强行重写fly()为“不能飞”就违反了原则。
正确做法:把“会飞的鸟”和“不会飞的鸟”分开,或者让企鹅不继承“鸟”的飞行能力。
好处:保证继承体系的稳定性,避免“父类能用的地方,子类一用就崩”。


4. 依赖倒转原则(DIP)——高层不伺候底层

核心思想:高层模块(比如业务逻辑)不直接依赖底层模块(比如数据库),而是依赖抽象。
举个栗子🌰
假设你写了个“接收消息”功能,直接依赖“邮件”类。如果以后要支持微信消息,就得改代码。
正确做法:定义一个“消息接口”,邮件和微信都实现它。高层代码只依赖接口,不关心具体实现。
好处:换底层实现(比如从邮件改成微信)时,高层代码完全不用动。


5. 合成/聚合复用原则(CARP)——能用组合就别用继承

核心思想:优先用组合(has-a)或聚合(uses-a),而不是继承(is-a)来复用代码。
举个栗子🌰
类B想用类A的一个方法,如果直接继承A,就会被迫继承A的其他方法,导致代码臃肿。
正确做法:把A的对象作为B的成员变量(组合),只调用需要的方法。
好处:代码更灵活,避免继承带来的“强耦合”。


6. 接口隔离原则(ISP)——接口要小而美

核心思想:别让一个接口塞满所有方法,按需拆分。
举个栗子🌰
一个“超级接口”定义了10个方法,但类A只用其中3个,类B用另外3个。这样类A和类B被迫实现不需要的方法。
正确做法:把大接口拆成多个小接口,按需实现。
好处:避免“强迫症式”实现,减少无用代码。


7. 迪米特法则(LoD)——少管闲事

核心思想:一个类只和它的“直接朋友”(成员变量、方法参数等)交互,不和陌生人(局部变量中的类)打交道。
举个栗子🌰
学校管理类要打印学院员工信息,如果直接调用学院员工的类,就违反了法则。
正确做法:让学院管理类自己处理打印逻辑,学校管理类只调用学院管理类的方法。
好处:降低类之间的耦合,让系统更模块化。


总结:七大原则的核心目标

  • 高内聚低耦合:每个模块独立,互不影响。

  • 易扩展易维护:加功能不改旧代码,改代码不影响其他模块。

  • 灵活复用:代码像乐高积木,拆拆拼拼就能用。

记住这些原则不是死规矩,而是帮你写出更优雅代码的“指南针”。实际开发中要灵活权衡,就像炒菜放盐——适量最好! 🧑🍳

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值