依赖倒置原则,高层次的模块不应该依赖于低层次的模块,它们都应该依赖于抽象。抽象不应该依赖于具体实现,具体实现应该依赖于抽象。
高层次模块依赖方向中层次模块,中层次模块依赖于低层次模块。高层次与低层次不相互依赖,低层次的任何修改都会影响高层次的模块。抽象层,高级层次,实现层次,具体实现依赖抽象层。
接口分离原则,客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上。怎么说呢?
有三个客户端A,B,C都依赖于一个大的接口,这个大的接口有A(),B(),C(),但是客户端A只需要A()而已,其他不需要,这个时候就利用接口分离原则让客户端A只需要A(),让客户端B只需要B(),让客户端C只需要C()。
设计原则是指导思想,从思想上给我们指明程序设计的正确方向,设计模式是实现的手段,因此设计模式也是遵守这些原则的。达到高内聚低耦合,高内聚就是说模块内部要高度聚合,是模块内部的关系,低耦合是说模块与模块之间的耦合度要尽量低,是模块与模块之间的关系。
单一职责原则总结:一个对象只做一件事。
开放封闭原则总结:对扩展开放,对修改封闭。
迪米特法则,又叫做最少知识原则总结:一个对象应该对其他对象有最少的了解。
设计模式中的外观模式和中介模式,是迪米特法则应用的例子。
迪米特法简单就是,只与朋友说话,不与陌生人说话。缺点就是系统中会产生大量的小方法。
合成复用原则,多用组合,少用继承。继承是面向对象的三大特征,封装,继承,多态,继承实现简单,易于扩展,但是继承也是由缺陷的,父类变,子类必须变,继承破坏了封装,对父类来说,它的实现对子类来说是透明的,继承是一种强耦合的关系。
父类变,子类必须变;继承破坏了封装(子类是封装的,因父类的改变,导致父类破坏了子类的封装),对于子类来说,通过继承父类,是没有安全保障的,父类修改其内容,就会导致子类的功能被破坏;对于父类来说,子类继承父类,重写它的方法时,父类的方法是不可以任意修改的。
设计原则:
单一职责原则,一个方法只做一件事情;里氏替换原则,子类可以代替父类;依赖倒置原则,只依赖接口不依赖方法,不关心底层的实现方法;接口分离原则,把大的接口拆分成小的接口;迪米特法则,函数中传入的参数越少越好,开放封闭原则,面向扩展开放,面向修改关闭。
5
单一职责原则,优点:降低了单个类或者是对象的复杂程度,按照单一职责原则把对象分解成更小的单位,有利于代码的复用,也有利于进行单元测试,当一个职责需要改变的时候,不会影响到其他的职责。缺点:增加了编码的复杂程度,同时增加了对象之间的关联难度。
理解为不同类具备不同的职责。一个类只承担一个职责。
最少知识原则,优点:减少或消除对象之间耦合程度,提高复用性。缺点:需要封装对象或者是引入一个第三方对象来处理两者之间的关系,有时候第三方对象会很复杂,复杂到难以维护。