更新中.......
刚开始学设计模式的时候, 一上来直接看别人的文章直接开撸.
问题描述:
-
学的时候感觉还不错, 能理解的了, 但是很容易忘记, 学了后面的就忘了前面的, 或者一段时间没接触设计模式以后, 很多东西都忘了, 更别提在项目中使用了;
-
看着别人的文章好像知道是这么回事, 但是就是不知道在项目中什么情况使用什么设计模式. 反正就是一脸懵逼, 似懂非懂的感觉,
借用古人的话: 学而不思则罔,思而不学则殆;
思考: 为什么会出现这样的问题?
我们太关注代码的实现, 而忽略了设计模式的本质.
我们学习设计模式的目的?
- 为了看懂系统源码或第三方优秀框架源码.
- 为了解决项目中碰到的问题.
- 面试(搞定上面2点, 面试应该问题不大).
- 自己封装一些东西的时候, 或许会用到.
- 其它的暂时没想到.
设计模式的本质
就是为了解决特定的问题.
既然是特定的问题, 那我们只需要关注什么设计模式解决的是什么问题就可以了; 不需要关注代码的实现过程. 代码实现过程过一遍即可.
1. 创建型模式:
关注的是对象的创建
设计模式 | 说明 | 伪代码 |
---|---|---|
单例模式 | 保证整个程序中只有一个实例 | A a = A.getInstance() |
Builder模式 | 解决问题: 对象参数比较多,初始化比较麻烦 , 例如OkHttp中, OkHttpClient初始化过程 | A a = A.Builder().builder() |
工厂模式 | 把对象创建的过程封装起来, 调用者不需要关注封装过程, 想拿哪个对象就直接去拿 | A a = Factory.createA(); |
原型模式 | copy(复制)已有的对象来创建的新的对象,从而节省时间和内存 | A a2 = a.copy() |
2. 结构型模式
设计模式 | 解决的问题 |
---|---|
适配器模式 | A需要和a才能正常工作, 通过适配器将b转成a, 再传给A. |
装饰模式 | java只能单继承, 在不使用的继承的方式下, 扩展对象的功能, 例如: ListView和RecyclerView添加头部和尾部 |
桥接模式 | |
组合模式 | |
外观模式 | |
享元模式 | |
代理模式 | A要访问a, A--->B(代理)--->a, 这个过程B代理可以做一些扩展性的东西 |
3. 行为型模式
设计模式 | 解决的问题 | 简单例子 |
---|---|---|
模版设计模式 | 让流程更加规范, 先做什么, 后做什么 | Activity生命周期, 按照先后顺序执行 |
命令模式 | ||
迭代器模式 | 容器对象A提供一个迭代器, 可以按顺序访问A中各个元素,同时不需暴露A的内部细节 | |
观察者模式 | ABC同时观察a, 如果a变化, ABC都会收到通知 | |
中介者模式 | ||
备忘录模式 | ||
解释器模式 | ||
状态模式 | ||
策略模式 | 同级的东西可以互相切换 | |
责任链模式 | ||
访问者模式 |
网友评论