什么是模式?模块化的过程是怎样的?
人们在自己的环境中不断地发现问题并寻找问题的解决方案,在这过程中,发现的问题和解决方案以不同的面孔重复出现,在这些不同的面孔背后又有共同的本质,这共同的本质就是模式。
模块化的过程就是把问题抽象化,在忽略掉不重要的细节后,发现问题的一般性本质,并找出普遍适用的解决方案的过程。
在软件开发中,为何我们需要去了解和运用模式?
了解模式有利于我们更好地去定位和了解问题的本质,在此同时,模式也可以为我们解决问题提供一个快速的、比较好的解决方案。
“开-闭”原则
面向对象设计(Object Oriented Design 或OOD)的第一块基石,便是“开-闭”原则(Open-Closed Principle , 即 OCP)
OCP指的是一个软件实体应该对扩展开放,对修改关闭。用面向对象的语言来讲就是:不允许修改的是系统的抽象层,允许扩展的是系统的具体实现层。
面向对象的重要原则是创建抽象化,并从抽象化导出具体化。
里氏代换原则(Liskov Substitution Principle , LSP ) :一个软件实体如果使用的是一个基类的话,那么一定适用于其子类,而且它根本不能察觉出基类对象和子类对象的区别。
依赖倒转原则(Dependence Inversion Principle , DIP):
要求客户端依赖于抽象耦合(Abstraction should not depend upon details . Details should depend upon abstractions )。
另一种表述是:要针对接口编程,不要针对实现编程(Program to an interface , not an implementation)。
如果设计师希望遵守“开-闭”原则,那么依赖倒转原则便是达到要求的途径。
依赖倒转原则是OO设计的核心原则,设计模式的研究和应用是以依赖倒转原则为指导原则的。
接口隔离原则(Interfance Segregation Principle,ISP)
使用多个专门的接口比使用单一的总接口要好,换言之,从一个客户累的角度来讲:一个类对另外一个类的依赖性应当是建立在最小的接口上的。
合成/聚合复用原则(Composite/Aggregate Reuse Principle,CAPP)
在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过想这些对象委派达到复用已有功能的目的。
简单表述:要尽量使用合成/聚合,尽量不要使用继承。
迪米特原则(Law of Demeter ,LoD)或最少知识原则(Least Knowledge Principle,LKP)
一个对象应当对其它对象有尽可能少的了解。
注:本篇大部分内容出之阎宏老师的《Java与模式》