设计模式原则
1. 单一职责原则(SRP)
单一职责原则(Single Responsibility Principle,SRP)是指一个类只负责一项职责,如果类承担的职责过多,就会导致可维护性变差,不易复用,容易变得庞大臃肿。因此应当遵循单一职责原则,将一个类的职责分解成多个类,每个类只负责一项职责,这样可以降低类的复杂度,提高代码的可读性和可维护性。
2. 开闭原则(OCP)
对扩展开放,对修改关闭
开闭原则(Open Close Principle,OCP)是一种软件设计原则,它的含义是:软件实体(类、模块、函数)应该对扩展开放,对修改关闭。
开闭原则的实现方式有两种:
(1)抽象化:定义抽象类,由它来维护子类,实现继承。开发人员只需继承抽象类即可扩展,而无
需修改抽象类或者已有子类。
(2)封装性:将可能发生变化的因素封装起来,不让外界访问。开发人员只需要修改封装的内部实
现代码,而无需改变对外提供的接口。
开闭原则的优点:
(1)可以减少系统的修改量,提高程序的可维护性,使系统更加健壮。
(2)可以提高软件系统的可扩展性,提高软件开发的效率。
简单来说就是多态实现,尽量使用接口和抽象类
3. 里氏代换原则(LSP)
里氏代换原则(Liskov Substitution Principle,简称LSP),又叫里氏替换原则,是面向对象设计的基本原则之一。
原则的定义是:如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1上都能正确地执行,那么类型T2的对象o2也能代替类型T1的对象o1,程序P在类型T2的对象o2上也能正确地执行。
里氏代换原则要求:
1、所有引用基类的地方必须能透明地使用其子类的对象。
2、子类可以扩展父类的功能,但不能改变父类原有的功能。
3、子类中可以增加新的方法,但不能删除父类中的方法。
里氏代换原则的核心思想是:子类必须完全实现父类的方法,并且不能破坏父类原有的功能,这样才能满足调用父类方法的程序可以正确地运行。
里氏替换原则是对“开-闭”原 则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实 现,所以里氏替换原则是对实现抽象化的具体步骤的规范。
4. 依赖倒转原则(DIP)
依赖倒转原则(Dependency Inversion Principle,简称DIP)是面向对象设计中最重要的原则之一 。它指导我们如何建立模块间的依赖关系,它要求我们在软件系统中尽量使用抽象而非现实的概念,这样能够降低系统的耦合度,提高系统的灵活性和可维护性。
依赖倒转原则的主要思想是:高层模块不应该依赖底层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
1、抽象不应该依赖细节:抽象是高层模块和底层模块的桥梁,抽象的定义应该比细节要抽象,抽象 指的是接口或抽象类,而不是具体的实现类。
2、细节应该依赖抽象:也就是说,细节的实现应该依赖抽象,而不是依赖具体的实现类。
3、高层模块不应该依赖底层模块:两个高层模块不应该有直接的依赖关系,它们都应该依赖抽象。
4、二者都应该依赖其抽象:高层模块和底层模块都应该依赖抽象来进行解耦,这样的设计可以降低 类与类之间的耦合度,提高系统的可维护性和可扩展性。
5. 接口隔离原则(ISP)
接口隔离原则(Interface Segregation Principle,ISP)是面向对象设计原则之一,它由美国软件工程 师Robert C. Martin提出,它的定义是:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。
接口隔离原则的本质是:尽量把一个类的接口设计的小而精,当类A依赖类B的时候,只让它使用B的 必要的接口,而不让它使用B的所有接口。
接口隔离原则的主要目的是保证程序的模块化,降低类之间的耦合性,提高系统的可维护性和可扩展性,还能够防止某些历史性的原因导致的bug。
实现接口隔离原则的方法有两种:
(1)通过多个接口来实现接口隔离原则,把一个类的功能拆分成多个接口,这样客户端就只需要依 赖其所需要的接口,而不是整个类,这样就可以降低类之间的耦合性;
(2)使用Adapter模式(适配器模式)来实现接口隔离原则,即把客户端需要的接口适配成类B所提 供的接口,从而把客户端和类B解耦。
6. 迪米特法则(LoD)
迪米特法则,又称最少知识原则(Law of Demeter,LoD),是一种简单而强大的软件设计原则,由 迪米特(Demeter)命名,它强调一个软件实体应当尽量少地与其他实体发生相互作用。
具体来说,在软件设计中,每一个对象都应当尽量少地了解其他对象的细节,也就是说,一个对象应当只和直接的朋友发生联系,而不和朋友的朋友发生联系。
迪米特法则能够减少耦合,提高系统的可维护性、可维护性和可扩展性,使系统更加灵活。迪米特法则的实现可以通过封装、继承等手段来实现,从而使系统更加模块化、易于维护和扩展。
实现细节对外隐藏,只开放接口
7. 合成复用原则(CRP)
合成复用原则(Composite Reuse Principle, CRP):尽量使用合成/聚合的方式,而不是使用继承 。
高内聚、低耦合
合成复用原则是面向对象编程中最重要的原则之一。它建议,应该通过合成和聚合组合对象,而不是通过继承来复用对象。
合成复用原则的核心思想就是,程序中的对象应该尽量使用合成/聚合的方式来关联,而不是使用继 承。这样做的优点有:
-
避免了类爆炸式增长,继承会导致子类的爆炸式增长,而使用合成/聚合的方式可以有效的避免这种情况的发生。
-
更加灵活,使用继承的方式会使对象之间的关系变的死板,而使用合成/聚合的方式可以使这种关系十分灵活。
-
更容易扩展,使用合成/聚合的方式可以很容易的进行扩展,而使用继承的方式就不容易进行扩展了。
-
减少耦合,通过使用合成/聚合的方式可以减少耦合,而使用继承的方式就会导致耦合性增加。