面向对象开发 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 List
runnerList = new ArrayList<>(); public static void register(Runner runner) { runnerList.add(runner); } public static void main(String[] args) { for (Runner runner : runnerList) { runner.run(); } }}

总结

以上五大原则是软件设计的基石,通过遵循它们可以显著提升代码的可维护性、可扩展性和可复用性。在实际开发中,可以根据项目需求选择性地应用这些原则,同时结合设计模式进一步优化代码架构。

上一篇:3种解法 - 两水壶拼水问题
下一篇:4种解法 - 最小的k个数

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年05月16日 22时59分59秒