面向对象六大原则
单一职责
概念
单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。
单一职责原则是实现高内聚、低耦合的指导方针,它是最简单但又最难运用的原则
单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小
扩展:一个类越简单,功能越单一,复用性越大
优点
降低类的复杂度,提升可读性
里氏替换原则
概念
里氏替换原则(Liskov Substitution Principle,LSP):子类可以扩展父类功能,但不能改变父类原有功能
子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法
子类可以增加自己特有的方法
当子类重载父类的方法时,方法的前置条件(方法的形参)要比父类方法的输入参数条件更宽松
当子类实现父类的抽象方法时,方法的后置条件(方法返回值)要比父类严格
优点
克服了继承中重写父类方法造成的可复用性变差的缺点,继承:1、代码共享,减少创建类的工作量,每个子类都拥有父类 的方法和属性.2、提高代码重用性.3、提高代码可扩展性.4、继承是侵入性的,只要继承就必须拥有父类的属性和方法.5、降低代码的灵活性
类的扩展不会给已有的系统引入新的错误,降低了代码出错的可能性
依赖倒置原则
概念
依赖倒置原则(Dependence Inversion Principle,DIP):高层模块不应该依赖于底层模块,两者都应该依赖其抽象;抽象不应该依赖与细节,细节应该依赖于抽象,核心思想:面向接口编程,不要面向实现编程
由于在软件设计中,细节具有多变性,而抽象层则相对稳定,因此以抽象为基础搭建起来的架构要比以细节为基础搭建起来的架构要稳定得多
优点
降低类间的耦合性
提高系统稳定性
降低并行开发引起的风险
提高代码可读性和可维护性
最佳实践
每个类尽量都有接口或抽象类,或者抽象类和接口都具备
变量的表面类型尽量是接口或者抽象类
任何类都不应该从具体类派生
遵循里氏替换原则