1.什么是设计原则。
设计原则是我们写出优质代码的指导思想。写代码容易,写好代码难。遵循设计原则,会使我们的代码模块更加合理,职责更加清晰,健壮性更强。编程是一门不断权衡的艺术,coding 时你需要不断的去权衡代码在功能设计上,职责划分上,实现上的利弊并做出取舍,你需要思考什么是变化的,什么是不变的,如何来抵御或迎合这种变化。
coding带有一定的主观性,这种主观性的背后其实是开发者的心智呈现,这种心智来源于开发者对于万事万物的哲思,最终沉淀为原则。设计模式是对设计原则的表达,设计原则是道,设计模式是术,道是更根本的东西,术是道的一种形态,道是普适的,术是局限的。设计原则,可以让我们从更高的维度来审视编程之美。
2.设计原则分类
(1).单一职责原则:应该有且只有一个原因引起类的改变,即一个类只负责一个职责。比如让类C负责两个不同的职责:职责P1,P2。当由于职责P1需求发生改变而需要修改类C时,有可能会导致原本运行正常的职责P2功能发生故障。
总结:只干一件事。
(2).里氏替换原则:只要父类出现的地方子类就可以出现,而且将其替换为子类也不会产生任何出错或者异常。子类必须完全实现父类的方法(方法不能为空)。即父类的方法必须是子类全部需要的,如果不是全部需要的,就违背了LSP原则。在类中调用其他类时必须使用父类或者接口,如果不使用父类或者接口,则类的设计违背了LSP原则。
总结:以子代父。
(3).迪米特法则:一个对象应该对其他对象有最少的理解,即一个类应该对自己需要耦合或需要调用的类知道的最少。
总结:最少知道。
(4).接口隔离原则:建立单一的接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。每个模块应该是单一的接口,提供给几个模块就应该有几个接口,而不是建立一个庞大臃肿的接口来容纳所有客户端访问。
总结:接口尽量小。
(5).依赖倒置原则:实现类之间不发生直接的依赖关系,其依赖关系是通过接口或者抽象类产生的。即面向接口编程。实现类依赖接口或者抽象类,而接口或者抽象类不依赖于实现类。
总结:依赖抽象而非实现。
(6).开闭原则:软件实体(类、模块、方法)应该对扩展开放,对修改关闭。
即当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。
总结:不可修改可扩展。