设计模式笔记—— 预备知识
学习设计模式并不能让你的代码跑得飞起,但是能不996,所以只要是面向对象设计,必学
请各位至少熟读c艹primer再来看
OMT表示法就不说了,自己去翻书,拍照比较糊;而且现在谁还用OMT啊,都是UML了,自己网上找教程,学OMT也没用
1.重新理解面向对象
隔离变化:抵御软件变化带来新变化的一种构建模式
各司其职:新需求导致的变化不应该影响原类型的实现
对象是什么:封装了代码和数据,是一种公共接口,也是有责任的抽象,也就是说接口一样,实现不一样
2.原则
原则比模式更重要,所有的设计模式都是依赖原则推导出来的,建议全文背诵
依赖倒置原则(DIP):
高层模块不应该依赖底层模块,二者都应该依赖于抽象,抽象不应该依赖于实现细节,实现细节应该依赖于抽象。
开放封闭原则(OCP):
对扩展开放,对更改封闭:类模块应该是可以扩展的但是不能修改的
*尽量增加新的别在原有基础上改,不然就不好维护了*
单一职责原则(SRP):
一个类应该只含有因其他变化的原因,变换的方向隐含着类的责任
*不要含有其他类的变化,只含变化的原因,别写太多责任*
Liskov替换原则(LSP):
子类必须能够替换他的基类(IS-A),继承表达类型抽象
*如果用不了父类不要气急败坏直接throw excpetion*
接口隔离原则(ISP):
不应该强迫客户程序依赖他们不用的方法,接口应该小而完备
*public里面只提供对外函数,子类要用就protected,自己用就priviate*
优先使用对象组合而不是类继承
继承在某种程度上破坏了封装性,子类父类耦合度高,对象组合只需要良好定义的外部接口就行,这就是所谓的复合。
*继承往往暴露的东西太多,但是复合的话更能保证彼此的独立性。*
封装变化点
使用封装创建对象的分界层,让设计者可以在对象的一侧进行修改而不会对另一侧产生不良的影响,从而实现松耦合。
*高层次的封装是封装变化点而不是封装对象和函数*
针对接口编程而不是针对实现编程
不将对象声明为具体的类而是声明为某个接口
客户程序无需知道对象的具体类型只需要知道接口
从而减少系统中的各部分依赖关系,从而实现高聚合,松耦合设计方案
意思跟依赖倒置差不多
3. 23种模式的具体分类
组件协作类
template method
strategy
observer/event
单一职责
decorator
bridger
对象创建
factory method
abstract factory
prototype
builder
性能问题
singleton
flyweight
接口隔离
facade
proxy
mediator
adapter
状态变化
memento
state
数据结构
composite
iterator
chain of resposibility
行为变化
command
visitor
领域问题
interpreter
4.重构关键技法
静态/动态
早绑定/晚绑定
继承/组合
编译时依赖/运行时依赖
紧耦合/松耦合
在以后的文章中具体碰到了会提及,其实都是说的一个东西