单一职责原则
两个不同的功能不能放在同一个类里,随着功能的增多,类会越来越大,代码也越来越复杂,耦合度太强
开闭原则
对象(类、模块、函数等)对于扩展是开放的,对于修改是封闭的。
开闭原则指导我们,当软件需要变化时,应该尽量通过扩展的方式来实现变化,而不是通过修改已有的代码来实现。这里的“应该尽量”4个字说明OCP原则并不是说绝对不可以修改原始类的,当有这种修改的需求时,应该尽早地重构,而不是通过继承等方式添加新的实现,这会导致类型的膨胀以及历史遗留代码的冗余
里式替换原则
子类可以替换父类出现在父类能够出现的任何地方。比如你能代表你爸去你奶奶家干活。
里氏替换原则的核心原理是抽象,抽象又依赖于继承这个特性,在OOP(面向对象的编程)当中,继承的优缺点都相当明显。
优点:
- 代码重用,减少创建类的成本,每个子类都拥有父类的方法和属性;
- 子类与父类基本相似,但又与父类有所区别;
- 提高代码的可扩展性。
缺点:
- 继承是侵入性的,只要继承就必须拥有父类的所有属性和方法;
- 可能造成子类代码冗余、灵活性降低,因为子类必须拥有父类的属性和方法
依赖倒置原则
高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。抽象不应该依赖于具体实现,具体实现应该依赖于抽象。就是你出国要说你是中国人,而不能说你是哪个村子的。比如说中国人是抽象的,下面有具体的xx省,xx市,xx县。你要依赖的是抽象的中国人,而不是你是xx村的。
接口隔离原则
设计时采用多个与特定客户类有关的接口比采用一个通用的接口要好。就比如一个手机拥有打电话,看视频,玩游戏等功能,把这几个功能拆分成不同的接口,比在一个接口里要好的多。
接口隔离原则的目的是系统解开耦合,从而容易重构、更改和重新部署。
迪米特法则
迪米特法则又叫最少知识原则,一个对象应当对其他对象有尽可能少的了解。再复杂的系统都可以为用户提供一个简单的门面,Java Web开发中作为前端控制器的Servlet或Filter就是一个门面,浏览器对服务器的运作方式一无所知,但是通过前端控制器就能够根据你的请求得到相应的服务。
调停者模式也可以举一个简单的例子来说明,例如一台计算机,CPU、内存、硬盘、显卡、声卡各种设备需要相互配合才能很好的工作,但是如果这些东西都直接连接到一起,计算机的布线将异常复杂,在这种情况下,主板作为一个调停者的身份出现,它将各个设备连接在一起而不需要每个设备之间直接交换数据,这样就减小了系统的耦合度和复杂度。 迪米特法则简单的说就是如何做到"低耦合",门面模式和调停者模式就是对迪米特法则的践行。(例子:皇上召见大臣是通过太监)
总结
- 单一职责原则:一个类只负责一个功能
- 开闭原则:对象**(**类,模块,函数等等)对于扩展开放,对于修改关闭
- 里式替换原则:能够使用到父类的地方都能够使用子类对象,就是子类可以替换父类出现在父类能够出现的任何地方
- 依赖倒置原则:高层模块不应该依赖低层模块,它们都应该依赖于抽象。抽象不应该依赖于具体实现,具体实现应该依赖于抽象。
- 接口隔离原则:客户端不应该依赖它不需要的接口(功能),类与类之间的依赖应该建立在最小的接口上
- 迪米特法则: 一个对象应当对其它对象有尽可能少的了解,只和朋友通信,不和陌生人说话,所以迪米特法则又叫做最少知识原则