前言
设计原则和设计模式旨在帮助我们设计出一个可复用、可扩展、可维护的应用.
设计原则:设计OR重构系统的指导方针.
设计模式:解决某类问题性质有效的方法.
设计原则和设计模式要实现的目标是:在需求变动或者系统升级时,尽可能少的改变代码,尽可能多的实现新的功能.
设计原则是设计模式的"背后的故事",要深入理解设计模式必先深入理解设计原则.
设计原则
1.开闭原则(Open Close Principle)
Open for extension, closed for modifications.
对扩展开放,对修改关闭.
可以说开闭原则是所有原则中最核心的原则,它的定义就是可扩展性可维护性最好的阐释.
2.依赖倒置原则(Dependency Inversion Principle)
Depend upon Abstractions. Don’t depend upon concretions.
依赖倒置原则强调面向接口编程,依赖于抽象而非具体.依赖倒置原则和开闭原则是内在相通的,一个强调扩展,一个是实现扩展最常用的机制.
3.接口隔离原则(Interface Segregation Principle)
Many client-specific interfaces are better than one general-purpose interface.
接口隔离原则强调:一个接口对应一个客户,避免用一个接口提供给多个客户提供服务.一个接口对应一个客户,当该客户的需求变动时,只需要变动它所对应的接口.体现了高内聚低耦合的思想.
4.单一职责原则(Single Responsibility Principle)
A class should have only one reason to change.
就一个类而言,应该只有一个引起他变化的原因.
也就是说,不要把变化原因各不相同的职责放在一起,因为不同的变化会影响到不相干的职责。一个类尽量做到了功能单一,单一职能的不是说职能多了我们实现不了,是为了后期的测试维护,每个类的很单一,我们找错误的时候就可以一步到位.添加新的功能的时候,也不用牵扯到很多的类.
5.里氏替换原则(Liskov’s Substitution Principle)
Derived types must be completely substitutable for their base types.
子类型必须能够替换它们的父类型.这个原则是对继承的一个约束.里氏替换原则很好理解,举个例子:mysql的java驱动必须遵守jdbc规范.
引用一个非常好的总结:开闭原则是总纲,它告诉我们对扩展开放,对修改关闭;依赖倒置原则告诉我们要面向接口编程;接口隔离原则告诉我们要在设计接口的时候要精简单一;单一职责原则告诉我们实现类要职责单一;里氏替换原则告诉我们不要破坏继承体系.
在实际开发中,我们应当尽量达到这些原则,而不是随时需要遵循这些原则.任何Java程序都有违反这些指导方针的地方.在合适的时候使用原则可以让我们的程序更富有弹性,但死板固执的应用这些原则会使程序更加复杂,事倍功半.
设计模式
GOF将23设计模式种设计模式分为创建型、结构型、行为型3种类型.下面列出一些常见模式以及它们的应用实例.下面提到的模式实例的实现与书本上有所差距,相比模式的实现,我更关注的是模式的应用场景.
单例模式(Singleton):保证程序中一个类只有一个实例.
public class Runtime { /** * 类加载时初始化实例 */ private static Runtime currentRuntime = new Runtime(); /** * 提供获取实例的方法 */ public static Runtime getRuntime() { return currentRuntime; } /** 私有化构造函数 */ private Runtime() {} // 剩下的方法