这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记
在程序设计中,设计模式可谓是十分重要的概念,它是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。其目的是为了提高代码的可重用性、代码的可读性和代码的可靠性。
今天,我想谈谈面向对象程序设计的七大原则。
七大设计原则
开闭原则
定义:软件的实体应对扩展开放,对修改关闭。
含义:在需求发生改变时,不应修改原有的代码,而是去拓展它的功能以满足新需求。
里氏替换原则
定义:继承必须确保超类所拥有的性质在子类中仍然成立。
含义:子类继承父类时,尽量不要重写父类已实现的方法。对于Java而言,可以在父类的方法前面加上final修饰符,被final修饰符修饰的方法是无法被继承的。
依赖倒置原则
定义:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。
含义:要面向接口编程,而不是面向具体实现,因为细节是容易改变的,而抽象相对稳定,且可以随意切换具体实现。
单一职责原则
定义:单一职责原则规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分。
含义:一个对象不应有太多的职责,因为一个职责的变化可能会削弱或者一直这个类实现其他职责的能力,且假如一个客户端只需要该对象的某一个职责,却不得不把其他的职责都包进来,这样就会造成冗余。
接口隔离原则
定义:一个类对另一个类的依赖应该建立在最小的接口上。
含义:接口的粒度需要足够小,不要建立一个很大的接口供其他类调用。
迪米特法则
定义:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。
含义:在实体间通信时,可以建立中介类,通过中介类来通信。这样可以降低类之间的耦合度,提高不同模块的独立性,但是这样的操作会产生大量的中介类,增加系统负担,一定程度上也增大了维护难度。
合成复用原则
定义:软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。
含义:继承会破坏类的封装性,且子类和父类的耦合度高,且复用的灵活性较低。如果使用组合或聚合复用,可以在一定程度上解决这些问题。