架构师训练营 - 第 3 课总结 -20200620- 软件设计
1. SOLID原则(复盘)
2. 依赖倒置(复盘)
高层controller模块(根据业务逻辑)定义了自已的抽象/接口,低层service实现接口,controller不再依赖于service的接口,因而依赖倒置了.
依赖倒置是IOC的一种实现.
依赖倒置常用于框架.应用程序不需要调用框架的代码就可以使用框架.
架构师开发的代码是给工程师用. 工程师开发的代码给用户用.
若要看框架核心代码,可看最初版本的代码.少而精.


3. 设计模式的定义和作用


4. 模式案例
响应式编程 - Flower(异步架构设计)

工厂模式 - 排序器设计
1) client端实现了开闭原则,但是xxxFactory没有.

2) 通过反射,优化xxxFactory,将指定的排序算法作为传入参数.但会导致client的代码随需求改变以及其他新的问题.

3) 继续优化,将排序算法放入配置文件.这符合了开闭原则. 但则不能在编译阶段发现配置是否有误以及Sorter的值的单一等问题.(与spring已有几分相似)

单例模式 - 代码设计

方法一: 一开始就创建

方法二: 延迟创建,并支持多线程.

Spring中的单例模式应用

适配器模式
把某个对象已经提供的方法适配成另外一种对象,以供使用.

模版模式 - Junit
使用了策略模式(插件),模版模式,映射,组合模式等模式.
多层模版模式的嵌套组合
模版模式中,基类定义了一组流程,包含不同步奏,并要求子类必须执行或可以选择执行这些步奏.

策略模式 - Junit

组合模式 - AWT

装饰器模式



MVC - Spring



版权声明: 本文为 InfoQ 作者【👑👑merlan】的原创文章。
原文链接:【http://xie.infoq.cn/article/70bb9db9d881b4b706ad6218a】。文章转载请联系作者。
评论