OOP七大原则

1.开闭原则

对扩展开放,对修改关闭。

当需求发生变化时,在不修改软件实体源代码的情况下,可以进行功能扩展,使其满足新需求。

2.里氏替换原则

继承必须确保超类所拥有的性质在子类中仍然成立。

通俗来讲就是,子类可以扩展父类的功能,但不能改变父类原有的功能,即不可以重写父类的方法。

如果通过重写父类方法扩展新功能,写起来可能会很简单,但这会使整个继承体系的可复用性变得很差,特别是运用多态比较频繁时,程序很有可能会运行错误。

典型案例,“正方形不是长方形”,“鸵鸟不是鸟”。

3.依赖倒置原则

要面向接口编程,不要面向实现编程。

原始定义为:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。

依赖倒置原则是实现开闭原则重要途径之一。

4.单一职责原则

控制类的粒度大小,将对象解耦,提高其内聚性。

职责指类变化的原因,一个类应当有且只有一个引起它变化的原因,若有多个则该类需要拆分。如果一个对象承担了太多职责,至少会存在以下两个缺点:

一、当一个职责变化时,可能会削弱或抑制该类实现其他职责的能力。

二、当客户端需要该对象的某一个职责时,不得不将其他不需要的职责全都包含进来,从而造成冗余代码或代码的浪费。

单一职责同样也适用于方法。一个方法应该尽可能做好一件事情,如果一个方法处理的事情太多,其颗粒度会变得很粗,不利于重用。

5.接口隔离原则

要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。

接口隔离原则和单一职责都是为了提高类的内聚性、降低它们之间的耦合性,体现了封装的思想,但两者是不同的:

单一职责原则注重的是职责,而接口隔离原则注重的是对接口依赖的隔离。

单一职责原则主要是约束类,它针对的是程序中的实现和细节;接口隔离原则主要约束接口,主要针对抽象和程序整体框架的构建。

6.迪米特法则

只与你的直接朋友交谈,不跟“陌生人”说话。

简单来说就是,如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。

但过度使用迪米特法则会使系统产生大量的中介类,从而增加系统的复杂性,使模块之间的通信效率降低。所以,在釆用迪米特法则时需要反复权衡,确保高内聚和低耦合的同时,保证系统的结构清晰。

7.合成复用原则

软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。组合是“has a”关系,继承是“is a”关系。

组合就是A类的对象是B类的成员变量,相当于 A类是B类对象的一个属性。
例如,Dog类和Animal类应该使用继承关系,因为狗是动物;Person类和Head类应该使用组合关系,因为头是组成人体的一部分,即人有头。

如果要使用继承关系,则必须严格遵循里氏替换原则。合成复用原则同里氏替换原则相辅相成的,两者都是开闭原则的具体实现规范。

你可能感兴趣的:(设计模式)