设计原则总结

设计原则
1. 单一职责原则(Single Responsibility Principle - SRP)
原文:There should never be more than one reason for a class to change.
译文:永远不该该有多于一个缘由来改变某个类。
理解:对于一个类而言,应该仅有一个引发它变化的缘由。说白了就是,不一样的类具有不一样的职责,各施其责。这就比如一个团队,你们分工协做,互不影响,各作各的事情。
应用:当咱们作系统设计时,若是发现有一个类拥有了两种的职责,那就问本身一个问题:能够将这个类分红两个类吗?若是真的有必要,那就分吧。千万不要让一个类干的事情太多!程序员

2. 开放封闭原则(Open Closed Principle - OCP)
原文:Software entities like classes, modules and functions should be open for extension but closed for modifications.
译文:软件实体,如:类、模块与函数,对于扩展应该是开放的,但对于修改应该是封闭的。
理解:简言之,对扩展开放,对修改封闭。换句话说,能够去扩展类,但不要去修改类。
应用:当需求有改动,要修改代码了,此时您要作的是,尽可能用继承或组合的方式来扩展类的功能,而不是直接修改类的代码。固然,若是可以确保对总体架构不会产生任何影响,那么也不必搞得那么复杂了,直接改这个类吧。编程

3. 里氏替换原则(Liskov Substitution Principle - LSP)
原文:Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.
译文:使用基类的指针或引用的函数,必须是在不知情的状况下,可以使用派生类的对象。
理解:父类可以替换子类,但子类不必定能替换父类。也就是说,在代码中能够将父类所有替换为子类,程序不会报错,也不会在运行时出现任何异常,但反过来却不必定成立。
应用:在继承类时,务必重写(Override)父类中全部的方法,尤为须要注意父类的 protected 方法(它们每每是让您重写的),子类尽可能不要暴露本身的 public 方法供外界调用。
该原则由麻省理工学院的 Barbara Liskov 女士提出,她是美国第一位获取计算机博士学位的女性,曾经也得到过计算机图灵奖。架构

4. 最少知识原则(Least Knowledge Principle - LKP)
原文:Only talk to you immediate friends.
译文:只与你最直接的朋友交流。
理解:尽可能减小对象之间的交互,从而减少类之间的耦合。简言之,必定要作到:低耦合,高内聚。
应用:在作系统设计时,不要让一个类依赖于太多的其余类,需尽可能减少依赖关系,不然,您死都不知道本身怎么死的。
该原则也称为;迪米特法则(Law of Demeter);,由 Ian Holland 提出。这我的不太愿意和陌生人说话,只和他走得最近的朋友们交流。ide

5. 接口隔离原则(Interface Segregation Principle - ISP)函数

原文:The dependency of one class to another one should depend on the smallest possible interface.
译文:一个类与另外一个类之间的依赖性,应该依赖于尽量小的接口。
理解:不要对外暴露没有实际意义的接口。也就是说,接口是给别人调用的,那就不要去为难别人了,尽量保证接口的实用性吧。她好,我也好。
应用:当须要对外暴露接口时,须要再三斟酌,若是真的没有必要对外提供的,就删了吧。一旦您提供了,就意味着,您未来要多作一件事情,何苦要给本身找事作呢。设计

6. 依赖倒置原则(Dependence Inversion Principle - DIP)
原文: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.
译文:高层模块不该该依赖于低层模块,它们应该依赖于抽象。抽象不该该依赖于细节,细节应该依赖于抽象。
理解:应该面向接口编程,不该该面向实现类编程。面向实现类编程,至关于就是论事,那是正向依赖(正常人思惟);面向接口编程,至关于经过事物表象来看本质,那是反向依赖,即依赖倒置(程序员思惟)。
应用:并非说,全部的类都要有一个对应的接口,而是说,若是有接口,那就尽可能使用接口来编程吧。
 指针

相关文章
相关标签/搜索