软件设计原则

1. 开闭原则(Open-Closed Principle)

  • 定义: 软件实体(类,模块,函数)应该对扩展开放,对修改关闭尽可能在不修改源代码的基础上添加或修改功能
  • 实现方式: 用抽象构建框架,用实现扩展细节(面相抽象编程)。
  • 优势: 提高软件系统的可复用性以及可维护性。

2. 依赖倒置原则(Dependence Inversion Principle)

  • 定义: 高层模块不应该依赖底层模块,二者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。
    • 高层模块: 通常指系统中不经常发生变化的部分,是一个系统区别于其他系统的重要标志,也是直接面相用户的部分(通常包含系统的策略选择于业务模型)
    • 低层模块: 通常指系统中经常发生变化的部分,为系统的具体实现,并不是直接面相用户的。
    • 细节: 功能的代码具体实现
  • 实现方式: 针对接口编程,不要针对实现编程。
  • 优势: 减少代码间的耦合性,提高系统的稳定性以及提高代码的可读性与可维护性。

3. 单一职责原则(Simple Responsibility Principle)

  • 定义: 不要存在多于一个导致类变更的原因。
  • 实现方式: 一个类,接口,方法只负责一项职责(实现最小颗粒度的功能)。
  • 优势: 降低类的复杂度,提高类的可读性,提高系统的可维护性,降低功能变更引起的风险。

4. 接口隔离原则(Interface Segregation Principle)

  • 定义: 用多个专门的接口,而不是使用单一的总接口(客户端不应该依赖一个不需要的接口)。
  • 一个类对应另一个类的依赖应该建立在最小的接口上
  • 建立单一接口,而不是建立庞大臃肿的接口
  • 接口中的方法尽可能的少,细化接口
  • 优势: 符合高内聚低耦合的设计思想,从而使得类有很好的可读性,可扩展性和可维护性。

5. 迪米特法则(Law of Demeter)

  • 定义: 一个对象应该对其他对象保持最少的了解。(降低类与类之间的耦合)
    • 朋友条件:
      1. 当前对象本身(This);
      2. 被当做当前对象的方法参数传入进来的对象;
      3. 当前对象的方法所创建或者实例化的任何对象;
      4. 当前对象的任何组件(被当前对象的实例变量引用的任何对象);

如果不满足朋友条件,则两个类就不应该发生直接的相互作用,如果是其中一个类要调用了另一个类的某个方法的花,可以通过第三者转发这个调用。

  • 优势: 降低类之间的耦合。

6. 里氏替换原则(Liskov Substitution Principle)

  • 定义: 如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得T1定义的所有程序P在所有的对象o1都替换成o2时,程序P的行为没有发生变化,那么类型T2是类型T1的子类型。
    • 引申定义: 子诶可以扩展父类的功能,但不能改变父类原有的功能。
      1. 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
      2. 子类中可以增加自己特有的方法。
      3. 当子类的方法重载父类的方法时,方法的前置条件(方法的输入,入参)要比父类的方法输入参数更加宽松。
      4. 当子类的方法实现父类的方法时(重写,重载或实现抽象方法),方法的后置条件(方法的输出,返回值)要与父类相同或者更加严格。
  • 优势: 约束继承泛滥,加强程序的健壮性。

7. 合成复用原则(Composite/Aggregation Reuse Principle)

  • 定义: 尽量使用对象组合,聚合而不是继承关系达到软件复用的目的
    • 聚合Has-A: 关系较弱,代表部分事物的对象(次要) 与代表聚合事物的对象(主要)生命周期无关,删除聚合对象不会删除代表部分事物的对象。
    • 组合Contains-A: 关系较强,一但删除代表组合事物的对象(主要),那么代表部分事物的对象(次要)也会一起被删除。
    • 继承is-A
  • 优势: 使系统更加灵活,降低类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少。
  • 案例: 数据库链接抽象类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值