一个技术,思想是起点,有了想法之后才会开始有实现,尽管设计模式是总结而来,但是任何东西当你做的时候就会朦胧中有一个指导思想。所以思想是根源,有了指导思想,后面的就不会迷失方向了。
设计模式是用来针对变更比较频繁的软件项目的一种实用技术,那么它的一切起源就是为了应对修改。
有一点需要明确
设计模式不能做到完全解耦,事实上完全解耦是不存在的,完全没有耦合的代码什么也做不了,我们的目的是松耦合。
基础
抽象、封装、多态、继承
原则
1.分离并封装变化
找出应用
中可能需要变化之处
,把它们取出来封装
起来,不要和那些不需要变化的代码混在一起,以便以后可以轻易的改动或扩充此部分,而不影响不需要变化的部分。
2.多用组合,少用继承
组合是Has-A
,继承是Is-A
。
- 继承在编译时静态决定的,而且所有的子类都会继承到相同到行为,锁死了变化。
- 组合由于是一个field,可以用getter/setter方法在运行时修改真实的执行者,通过组合(composition)一个field,然后把具体的逻辑委托(delegation)给这个field执行。
3.针对接口编程,而不是针对实现编程。
注意:设计模式中的接口不是指interface修饰的接口,而是泛指超类(可以是类或接口)。“针对接口编程”这句话,可以更明确的说成“变量的声明类型应该是超类型,通常是一个抽象类或者是一个接口”。
要点
- 模式不是发明,而是发现。
- 良好的OO设计必须具备
可复用
、可扩充
、可维护
3个特性。 - 模式不是代码,而是针对设计问题的通用解决方案。
- 大多数的模式和原则,都着眼于
软件变化
的主题。 - 大多数的模式都允许系统局部改变独立于其他部分。
- 我们常把系统中
会变化的部分
抽出来封装。 - 模式让开发人员之间有共享的语言,能够最大化沟通的价值。
一点自己的思考
- 可变点如果是方法就抽成接口