设计模式之六大原则

单一职责原则(SRP)

一个类或一个方法只负责单一的职责

​ 定义:单一职责是为了防止一个类或方法内有多个职责,当后续需要对某个职责进行改动时,可能会对另一个职责造成影响,因此在开发过程中,尽量要让一个类或方法只承担一个职责。

​ 当然在实际开发过程中,需要根据具体的业务情况来处理,总来的说,不论是设计原则还是设计模式,都是需要在实践中不断总结,积累经验的,因此与其看视频,不如自己动手去做😏

​ 单一职责原则是实现高内聚、低耦合的指导方针,在很多代码重构手法中都能找到它的存在,它是最简单但又最难运用的原则,需要设计人员发现类的不同职责并将其分离,而发现类的多重职责需要设计人员具有较强的分析设计能力和相关重构经验。所以走上了代码这条路,就别想着溜了,老老实实为老板写代码来积累自己的经验吧

开闭原则(OPC)

开放扩展,关闭修改

​ 定义:当软件需要增加或者修改某个功能时,尽量满足通过扩展来实现目标,而不是修改已有的代码。

​ 实现开闭原则,一般的方法是抽象出接口或者类(回顾一下哎,抽象类不一定有抽象方法,有抽象方法的一定是抽象类),对于需要改进的地方,通过继承抽象类来实现需要新增或修改的功能,而不是在原来的代码中去做修改。

里氏替换原则(LSP)

Liskov Substitution Principle

​ 定义:如果一个类型是某个抽象类型的子类型,那么可以在程序中使用该抽象类型的地方,都可以替换为该子类型,而不会影响程序的正确性。

​ 遵循里氏替换原则有助于提高代码的可维护性、可扩展性和可重用性。它强调了面向对象设计中的继承关系的正确使用,要求子类在继承父类的同时,不改变父类的行为,而是通过扩展父类的功能来实现自己的特殊需求。

​ 总结来说,里氏替换原则要求子类能够无缝替换父类,并且保持程序的正确性和一致性。它是面向对象设计中的一个重要原则,有助于提高代码的可维护性和可扩展性。

依赖倒置原则(DIP)

Dependency Inversion Principle

​ 定义:依赖倒置原则是指高层模块不应该依赖于低层模块,二者都应该依赖于抽象接口;抽象接口不应该依赖于具体实现细节,具体实现细节应该依赖于抽象接口。

​ 换句话说,依赖倒置原则要求我们通过抽象来解耦高层模块和低层模块之间的依赖关系。高层模块应该依赖于抽象接口,而不是具体的低层模块。这样可以使得系统更加灵活、可扩展和可维护。

​ 依赖倒置原则的核心思想是面向接口编程(Programming to an interface),而不是面向实现编程(Programming to an implementation)。通过定义抽象接口,高层模块和低层模块可以通过接口进行通信,而不是直接依赖于具体的实现类。这样可以降低模块之间的耦合度,提高代码的可测试性和可复用性。

​ 总结来说,依赖倒置原则要求我们通过抽象接口来解耦高层模块和低层模块之间的依赖关系,使得系统更加灵活、可扩展和可维护。它是面向对象设计中的一个重要原则,有助于提高代码的质量和可维护性。

接口隔离原则(ISP)

Interface Segregation Principle

​ 接口隔离原则是指客户端不应该依赖于它不需要的接口,类之间的依赖关系应该建立在最小的接口上。

​ 换句话说,接口隔离原则要求我们将庞大而臃肿的接口拆分成更小、更具体的接口,以满足客户端的需求。一个类不应该强迫依赖于它不需要的接口,而是应该只依赖于它需要的最小接口。

​ 遵循接口隔离原则有助于减少类之间的耦合度,提高代码的可维护性和可复用性。它强调了接口设计的精简和高内聚性,避免了接口的冗余和不必要的依赖关系。

​ 总结来说,接口隔离原则要求我们将庞大的接口拆分成更小、更具体的接口,以满足客户端的需求。它是面向对象设计中的一个重要原则,有助于提高代码的灵活性和可维护性。

迪米特原则

Law of Demeter,又称最少知识原则 Least Knowledge Principle

​ 定义:迪米特原则指的是一个软件实体应该尽可能少地与其他实体发生相互作用。也就是说,一个对象应该尽可能少地了解其他对象的内部细节,这样可以降低对象之间的耦合度,使得各个对象之间可以更加独立地开发变化。

​ 迪米特原则的背景是面向对象设计和编程,由于面向对象系统中各个对象的内部复杂度往往非常高,因此迪米特原则被提出,希望通过降低对象之间的耦合度,来增加系统的可维护性和可扩展性,并降低系统的风险。

​ 迪米特原则的一个重要实现方法是将实体的依赖关系弱化,以使得系统中的各个部分都能够更加自由地变化。也就是说,实体不应该直接与其他实体产生直接的联系,而是通过其他中间的实体来进行联系。

​ 举个例子,如果一个对象需要使用另一个对象的数据,那么应该通过一个中间的控制对象来获取数据,而不是直接访问另一个对象的数据,这样可以避免实体之间的耦合度过高,使得系统更加健壮和灵活。