单一职责原则--Single Responsibility Principle(SRP)
开放封闭原则--Open Closed Principle(OCP)
里氏替换原则--Liskov Substitution Principle(LSP)
最少知识原则--Least Knowledge Principle(LKP)
接口隔离原则--Interface Segregation Principle(ISP)
依赖倒置原则--Dependence Inversion Principle(DIP)
【以上是六大设计原则:S O L L I D(首字母)-- Solid(固定的,稳定的)也称作SOLID原则】
下面分别介绍下这六大原则
There should never be more than one reason for a class to change.
【一个类只能由唯一一个因素来改变】
对于开发而言,有时会发现一个类拥有两种或者多种职责,这时就需要分析一下是否有必要将这些不同的职责分离开来,尽量不要让一个类从事太多的职责,分工明确反而会事半功倍。
Software entities like classes, modules and functions should be open for extension but closed for modifications.
【软件实体如:类、模块和函数、应该是开放式的拓展,封闭式的修改】
如果遇到需求有变动或者要修改代码的时候尽量用集成或组合的方式来拓展类的功能而不要直接修改类本身的代码,当前前提是对整体架构部产生任何影响,原则是死的设计的时候可以依照情况而定。
Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.
【所有引用基类的地方必须能够透明的使用其子类对象】
只要父类出现的地方子类就能够出现,而且替换为子类不会产生任何错误或异常。但是反过来,子类出现的地方,替换为父类就可能出现问题了。
继承父类时,必须重写父类中所有的方法,尤其需要注意父类的 protected 方法(它们往往是让您重写的),子类尽量不要暴露自己的 public 方法供外界调用。
Only talk to you immediate friends.
【只与你最直接的朋友交流】
该原则也称作“迪米特法则”(Law of Demeter)
尽量减少对象之间的交互,不要让一个类依赖于太多的其他类,需尽量减小依赖关系从而减小类之间的耦合。简言之,低耦合,高内聚。
The dependency of one class to another one should depend on the smallest possible interface.
【一个类与另一个类之间的依赖性,应该依赖于尽可能小的接口】
不要对外暴露没有实际意义的接口。尽可能保证接口的实用性,在对其他类的引用上,一个对象对其他对象的引用应当降到最低。
High level modules should not depends upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions.
【高层模块不应该依赖于低层模块,它们应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象】
面向接口编程是程序员的思维方式,相当于通过事物表象来看本质,属于反向依赖,即依赖倒置。
不是所有的类都需要对应的接口,如果存在接口就尽量用接口去编程。
所谓好莱坞原则其实就是我们常用的控制反转,对象的创建和管理都是由容器帮我们完成。
尽量避免出现循环依赖现象(A依赖B依赖C依赖A)“中介者模式”刚好可以解决该问题。
尽量将易变的类放在同一包下。该原则是“开放-封闭原则”的衍生。
尽量减少包的大小,因为如果重用了包中的某个类,实际上相当于重用了包中所有类。
尽量使用组合而不是继承的方式阔这类的功能。如:代理模式、装饰模式、适配器模式等
尽可能的封装你的代码以提高代码的重用性。
尽量让你的系统界面简洁、功能实用、操作方便。
尽量让惯性来减少配置提高开发效率,最终实现零配置。
尽量在接口定义的时做到命令和查询分离。
尽量将复杂的问题分离成多个简单的问题然后逐个解决。
【注:在实际应用中要具体问题具体分析,切勿过度设计或滥套原则以至于失去了原则本身的意义】