
面向对象开发 SOLID 设计原则(C#举例)
发布日期:2021-05-08 16:54:49
浏览次数:22
分类:精选文章
本文共 2677 字,大约阅读时间需要 8 分钟。
单一职责原则(SRP)、开闭原则(OCP)、里式替换原则(LSP)、接口隔离原则(ISP)、依赖反转原则(DIP)解析与实例
在软件工程中,设计模式和原则是确保代码质量、可维护性和可扩展性的关键。以下是五大核心原则的解析及其实例说明。
1. 单一职责原则(SRP)
单一职责原则(SRP)提倡一个类或模块只承担单一的职责。其核心思想是避免将多个不相关的功能合并在一个类中,以减少代码耦合性和提高可维护性。
不合理情况
- 类中的代码行数过多,包含多个不相关功能。
- 类与其他类之间存在过多依赖关系。
- 私有方法过多,难以定位类的主要功能。
拆分示例
// 不合理情况public class UserInfo { // ... private String province; // 省 private String city; // 市 private String region; // 区 private String address; // 详细地址}
优化示例
public class User { private String name; private String email; private String phone;}public class Address { private String province; private String city; private String region; private String address;}
2. 开闭原则(OCP)
开闭原则(OCP)强调软件实体应对修改关闭,对扩展开放。其核心目标是通过设计使得代码易于扩展,而不需要频繁修改现有功能。
实现思路
- 使用多态。
- 依赖注入。
- 基于接口而非实现编程。
- 采用设计模式(如装饰器、策略)。
示例
public interface IRun { void moveOn(int speed);}public class TwoLegRun implements IRun { @Override public void moveOn(int speed) { // ... }}public class FourLegRun implements IRun { @Override public void moveOn(int speed) { // ... }}public class Demo { private IRun animal; public Demo(IRun animal) { this.animal = animal; }}
3. 里式替换原则(LSP)
里式替换原则(LSP)确保子类可以替换父类的实例,而不影响原有功能的行为约定和正确性。
行为约定
- 函数的输入、输出、异常处理。
- 注释中明确的约定。
示例
public class Run { public virtual void moveOn(int speed) { // ... }}public class SlowRun extends Run { @Override public void moveOn(int speed) { // ... }}
4. 接口隔离原则(ISP)
接口隔离原则(ISP)建议将不需要的功能从接口中分离,以避免不必要的依赖关系。
示例
public interface IRun { void moveOn(int speed);}public interface IFly { void flyOn(int speed);}public class Sparrow implements IRun, IFly { @Override public void moveOn(int speed) { // ... } @Override public void flyOn(int speed) { // ... }}public class Dog implements IRun { @Override public void moveOn(int speed) { // ... }}
5. 依赖反转原则(DIP)
依赖反转原则(DIP)建议高层模块不要直接依赖低层模块,而是通过抽象来实现依赖关系。其核心目标是减少高层对低层的耦合性。
示例
public class Demo { public static void main(String[] args) { Runner runner = new Runner(); Sports sport = new Sports(runner); sport.showInfo(); }}
public interface Runner { void run();}public class Marathon implements Runner { @Override public void run() { // ... }}public class AutoApplication { private static ListrunnerList = new ArrayList<>(); public static void register(Runner runner) { runnerList.add(runner); } public static void main(String[] args) { for (Runner runner : runnerList) { runner.run(); } }}
总结
以上五大原则是软件设计的基石,通过遵循它们可以显著提升代码的可维护性、可扩展性和可复用性。在实际开发中,可以根据项目需求选择性地应用这些原则,同时结合设计模式进一步优化代码架构。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年05月16日 22时59分59秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Linux 命令中 find 和 xargs 命令的用法
2023-02-01
Linux 命令大全
2023-02-01
linux 命令详解 十二
2023-02-01
Linux 命令集
2023-02-01
Linux 基本bash命令
2023-02-01
Linux 基金会与 RISC-V 基金会合作推广开源芯片
2023-02-01
linux 如何使用命令行隐藏特定进程和端口信息?一文教会你
2023-02-01
Linux 学习总结(85)—— 后端开发人员需要知道的 Linux 服务器性能指标总结
2023-02-01
Linux 学习总结(89)—— sed 入门详解
2023-02-01
Linux 学习总结(91)—— 100 个网络基础概念问答
2023-02-01
Linux 学习总结(92)—— Linux 高效率使用技巧
2023-02-01
Linux 学习总结(93)—— Linux 管道符使用总结
2023-02-01
Linux 学习笔记__Day2
2023-02-01
Linux 学习笔记之超详细基础linux命令 Part 2
2023-02-01
Linux 安全与运维指南(非常详细)零基础入门到精通,收藏这一篇就够了
2023-02-01
Linux 安装
2023-02-01
linux 安装mysql8.0.x
2023-02-01