在我们设计和开发一个OO系统时候有一个普遍的感觉就是不使用设计模式似乎一样可以完成一个系统的开发任务,但是系统的质量和可扩展性、可维护性就不敢恭维了,特别是对于一个需要长期迭代的产品来说,这些系统特性决定着产品能否快速和愉快的扩展和维护下去,所以作为一个有追求和负责人的开发人员,适当和灵活的在系统中使用设计模式是非常有必要。
一、概念
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的
二、目的
为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
三、设计原则
开闭原则
此原则是由Bertrand Meyer提出的。原文是:“Software entities should be open for extension,but closed for modification”。就是说模块应对扩展开放,而对修改关闭。例如工厂是模式中“抽象产品角色”提供了公共接口,“具体产品”角色通过继承“抽象产品角色”来进行不同的实现,这就是既对扩展开放,又不用修改已存在“具体产品”,也就是对修改关闭。
里氏代换原则
里氏代换原则是由Barbara Liskov提出的。如果调用的是父类的话,那么换成子类也完全可以运行。
依赖倒转原则
依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。
接口隔离原则
每一个接口应该是一种角色,不多不少,不干不该干的事,该干的事都要干
合成/聚合复用
合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP)经常又叫做合成复用原则。合成/聚合复用原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。它的设计原则是:要尽量使用合成/聚合,尽量不要使用继承
最少知识原则
也叫迪米特法则。不要和陌生人说话,即一个对象应对其他对象有尽可能少的了解。
四、常见设计模式
五、文章推荐
https://github.com/Snailclimb/JavaGuide/blob/master/docs/system-design/设计模式.md