架构师训练营 - 学习笔记 - 第三周
这周主要讲了设计模式,想要成为一名优秀的架构师,设计模式与重构必学。
思考与感悟
复杂 vs 困难
【复杂问题】和【困难问题】是不一样的,一个复杂的问题你弄懂了后,当时你是懂的,但可能过了几天你又忘记了,因为它本身非常复杂和庞大。就像一个复杂又庞大的类,各种逻辑处理, if else, 好不容易把它理清楚,过几天你一动,又乱了。。。
一个困难的问题一旦解决弄懂后,可以把它用很简单的语言表达、组织出来。然后那大家都能接受,都能学得懂。就像爱因斯坦相对论,用天才大脑搞定,但现在高中物理都会教、都会学。所以难的问题一旦解决了,学习的门槛急剧地降低,但是复杂的东西,你动一点,又乱了。
当然,难的算法还是很难的,需要慢慢啃。。。
所以一定要把复杂的东西简单化,难的东西一旦搞定了它就变得容易了(难的让顶尖高手去做)。
李老师举的例子,Oracle SQL AST 转换成 Hadoop Hive AST, 博士把 困难 -> 容易(关系代数、语法转换),而李老师把 复杂 -> 简单(运用重构和设计模式)。
发现问题 vs 解决问题
在李老师看来,发现问题比解决问题重要(要用带刀子的眼睛看问题)。就好比你做 Code Review 时,高手能发现你发现不了的问题,解决方案可能在别人发现问题的时候你就知道了,但是你就是发现不了问题。
我个人觉得要培养发现问题的能力还是要多读书,多看,多积累,多实践。看的、做的多了,你就知道什么是好,什么是不好。
优秀的编码能力
关键时候还是要靠你的代码,搞定上下级,这样才能赢得架构师的“江湖地位”。当然,其他的如:沟通与写作的能力也重要。
中美软件基础技术差异
确实很大,这点对我触动很大(本人目前在外企),google+英文 与 baidu+中文 的搜索结果差别真的很大,很大。。。
Stack Overflow 上热心回答问题的老外的很多,他们能够花数小时回答一个问题,然后这些知识能够沉淀下来,节省后人的开发时间,我真的是很佩服。而且老外比较尊重知识产权,不会随便复制粘贴。
我们一直在用别人的语言、框架、技术,我们这代技术人(本人80后程序员)能给中国乃至世界的软件行业贡献什么?
感悟
以上是我和李老师产生的一些共鸣及感悟,不知道大家悟到了什么。我觉得这些才是重要的、自己看书所学不到的(书本上的知识任何时候都可以学),这也是为什么需要老师的原因——言传身教。
况且有些知识也不方便写在书中(面向简历编程,面向老板编程等 😀),只能是通过老师亲口讲出来。所以对我来说,李智慧老师这些十几年的感悟、经验及总结,才是最宝贵的。相对而言,下面的具体知识反而显得不那么重要了。
我相信,若干年后,我在这个极客时间架构师训练营学到的很多具体的知识我都会忘记,但是李老师的这些架构思维、方法、还有李老师那"然后的话、然后的话"的口头禅(😁)等,我会一直记得。
面向对象与设计模式 2020/6/18&20 星期四&六
什么是设计模式
定义
每一种模式都描述了一种问题的通用解决方案,这种问题在我们的环境中不停地出现。
设计模式是一种可重复使用的解决方案。
组成
四个部分:模式名称,待解问题,解决方案,结论。
23 + 1 种设计模式
NOTE: 粗体为本节课中智慧老师讲到的。
创建型 (Creational) 5+1
简单工厂不属于23种设计模式之一
建造者 (Builder)
原型模式 (Prototype)
单例模式 (Singleton)
一个类只有一个实例
因为只有一个实例,可以减少实例频繁创建和销毁带来的资源消耗
结构型 (Structural) 7
适配器模式 (Adapter)
系统需要使用现有的类,而这个类的接口与我们所需要的不同
例如:我们需要对 List 进行排序,但是我们需要一个 Sortable 接口,原有的 List 接口不能满足要求。
桥接模式 (Bridge)
组合模式 (Composite)
JUnit TestCase, TestSuite
4. 装饰器模式 (Decorator)
自己实现了一个接口,构造函数传进来的参数还是相同的接口对象。
可嵌套,装饰顺序可变。
5. 外观模式 (Facade)
6. 享元模式 (Flyweight)
7. 代理模式 (Proxy)
行为型 (Behavioral) 11
职责链 (Chain of Responsibility)
命令模式 (Command)
解释器模式 (Interpreter)
迭代器模式 (Iterator)
中介者模式 (Mediator)
备忘录模式 (Memento)
观察者模式 (Observer)
状态模式 (State)
策略模式 (Strategy)
基类定义策略接口,子类定义实现。
例如:JUnit, Eclipse 插件
应用程序 -> 策略接口 -> 策略实现
Eclipse -> TestCase -> XyxTests
模板方法 (Template Method)
基类定义组织/执行流程,子类定义实现。
访问者 (Visitor)
其他
依赖注入(DI) 与控制反转(IoC)
Flower 反应式编程框架 - 没怎么听懂,可能是因为我之前没做过 Web 开发
高并发,不会阻塞线程,线程变少了。
GitHub URL: https://github.com/zhihuili/flower
参考链接
http://c.biancheng.net/view/1320.html
云飞同学关于面向对象设计演进的一篇实践总结博文:https://xie.infoq.cn/article/d7ac62b69ae09b95adaf54566
评论