引言
对于设计模式,自己很早之前就看了好多本设计模式书籍,其中一些还看了好几遍,也一直希望自己能在编码的时候把这些设计模式用上去。可是,在日常的打码中,用的做多的就是单例,其次是观察者和建造者模式 ( builder ) 用得比较多,其他的基本很少用到。
用不到的原因是还是不能够理解设计模式的思想,无法将这些设计模式和编码遇到的问题联系起来,从而用不到设计模式。
其实设计模式的提出都是为了解决一个常见的问题而总结出来的办法。所以当你思考采用何种设计模式的时候,你应该先问问自己当前问题的是什么?根据问题去选取合适的设计模式。
等你熟悉了设计模式的以后,你会发现部分设计模式之间存在包含关系,甚至很相像,但是不同的设计模式解决的问题是不一样的。
当我们在设计一个模块的时候可以从以下几个角度去考虑:
``
- 这个模块与其他模块的关系是什么样的?
- 模块中哪些部分是不变的,哪些部分是在不断变化的,是如何变化的?
- 类与类之间的关系是怎么样的,为什么需要依赖,怎么可以不依赖?
- 要不要加一个接口?接口的存在是为了解决什么问题?
当然,本文并不是教你是如何使用设计模式。而是讲解设计模式的设计原则。设计模式在被设计出来的时候,也是遵循一些规则的。
设计模式六大原则,具体如下:
- 单一职责原则(类和方法,接口)
- 开闭原则 (扩展开放,修改关闭)
- 里氏替换原则(基类和子类之间的关系)
- 依赖倒置原则(依赖抽象接口,而不是具体对象)
- 接口隔离原则(接口按照功能细分)
- 迪米特法则 (类与类之间的亲疏关系)
每一个设计原则旁边都有个括号,是用来解释,或者描述应用范围的。下面将详细介绍每一个原则。