-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
如何看待设计模式
模式与问题的关系
- 是根据问题思考解决方案(设计模式),而不是用解决方案(设计模式)去思考问题;
- 设计模式只是解决某类问题的参考答案;
- 自己尝试解决某个模式想要解决的问题,然后参考设计模式,形成自己的结题思路;
解释
设计模式不是万能药,只能在必要的时候使用才能恰当的解决问题,否则会使问题复杂化。
不同语言提供的特性不同,在设计模式上也各有不同。例如go里函数式第一公民,Builder模式可以转换成functional options模式。
所以设计模式不能用来死记硬套的,要把它当做一种解决某类问题的参考答案。问自己某个设计模式是解决什么问题的?如何是自己面对这个问题会怎么解决?最终会自然而然的得到产生某个设计模式的思考过程。这样当工作中面对一个问题时,就不会硬套设计模式了,而是会自己思考,最终得出一个解决方案,只是这个方案有可能是某条设计模式罢了。
面向对象技术
对象和类之间的关系
三大支柱
- 继承或组合(组合优于继承)
- 封装
- 多态
23种设计模式
工厂方法
结构
抽象工厂
结构
生成器
思考
- 链式函数调用;
- 每个函数对应一个步骤;
结构
原型
问题
如何在不知道一个对象内部结构的情况下复制这个对象?
思考
只有这个对象知道自己的内部结构,那只能让这个对象来复制这个对象。这有点像go中context包获取注入信息的最佳实践。
结构
基本
注册表
单例
结构
适配器
问题
我们想使用功能,但提供这个功能的组件有很多,并且每个组件提供的接口不一样
思考
在自己的业务逻辑里,生命一个满足功能需求的接口,然后写适配组件封装提供功能的接口。
结构
桥接
问题
结构
组合
结构
装饰
使用函数式编程实现装饰模式
结构
外观
结构
享元
结构
代理
结构
责任链
使用函数式编程完成责任链
分析
- 将各个处理者间承转的工作放到处理者内部,这样就可以很容易的增删改责任链中的处理者;
结构
命令
备注
没有时间感受到命令模式的价值
结构
迭代器
go里面使用Next()模式实现迭代
例如rows.Next()、scanner.Scan();
参考资料: 3-ways-to-iterate-in-go
结构
中介者
结构
备忘录
结构
观察者
结构
状态
结构
策略
结构
模板方法
结构
访问者
结构
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels























