设计模式遵循的基本原则
1、开闭原则OCP:对扩展开放,对修改关闭
解决问题的关键在于抽象化。在预见可能变化的前提下,给出一个一劳永逸、不再更改的抽象设计,此设计允许有无穷无尽的行为在实现层被实现。
优点:
2、里氏代换原则LSP :基类可出现,则子类可出现,反之不成立
里氏代换原则是考量模型中对象之间是否符合继承复用的核心原则
3、依赖倒转原则DIP :依赖于抽象,不要依赖于具体
目标:解耦,不让具体实现层的变化造成更多的影响
优点:逻辑与实现的充分解耦
缺点:不易实现,有时趋于繁琐——把握稳定性
4、接口隔离原则ISP :多个专门的接口好过一个总接口
整洁——仅从美学角度分析
系统的可维护性得到增强。向客户提供的public接口是一种承诺,一旦提供就很难收回。做为提供方,没人愿意多做承诺。而且一旦服务发生变化,很容易定位受影响的客户端和不受影响的客户端。
5、合成/聚合复用原则CARP:能用合成/聚合就不要用继承
继承的优点
新的实现容易,超类功能可以通过集成自动进入子类
修改或扩展继承而来的实现较为容易
继承的缺点
继承会破坏封装,因为继承会将超类的实现细节暴露给子类——白箱复用
如果超类的实现发生改变,则子类也不得不改变——牛鞭效应
从超类继承而来的实现是静态的,无法在运行时间内改变,缺乏灵活性
6、迪米特法则LoD:不要与陌生人说话
别称:LKP(Least Knowledge Principle),最少知识原则——一个对象应当对其他对象有尽可能少的了解,也应当尽量少的被其他对象了解
狭义迪米特:如果两个类不必直接通信则不建立通信,通过第三方转发
广义迪米特:要注意信息的隐藏
Spring3的源代码,大量运用了设计模式,而且非常精巧。不得不佩服。DIP,ISP得到了充分地体现 。这样的代码,看起来真得是非常舒服……