设计模式说起来总是那么抽象,自己也没做过总结,今天就来记录一下吧。
先记录下浴缸主席的几个心得,慢慢去领会一下:
- 设计没有对错,只有好坏之分(对于同一东西产出的不同设计,可能差异很大,可能对立,但可能都是优秀的设计)
- 个人要形成自己的架构观(我们熟知的设计模式,很多模式可能是不完美的,实际使用中可能要从生搬硬套开始,熟知该模式的好坏,逐步完善,形成自己的架构观)
- 设计的目标总是正向收益
- 设计的过程总会带来负面收益
3、4的意思大概是要经历九九八十一难,才能到达西天取得真经,修成正果吧。
再记录下主席关于评价一个设计好坏的几个要素,还是实践中慢慢去领会:
- 开闭性是否良好(一个好的设计应该能应对未来一段长时间的业务变动,业务变动时应该不能涉及到核心代码的变动)
- 可维护性是否良好(设计的目的应该是让代码更清晰易懂)
- 性能(好的设计就得性能牛逼,就算不牛逼,也不能很差才是)
设计模式基本原则
- 单一职责原则 (Single Responsibility Principle)
- 里氏代换原则 (Liskov Substitution Principle)—任何基类可以出现的地方,子类一定可以出现
- 依赖倒置原则 (Dependence Inversion Principle)–抽象不应该依赖于细节,细节应该依赖于抽象。换言之,要针对接口编程,而非针对实现编程
- 接口隔离原则 (Interfere Segregation Principle)—客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上
- 迪米特法则 (最少知道法则) (Demeter Principle)
- 开闭原则 (Open Close Principle)
设计模式的分类
范围 | 创建型 | 结构型 | 行为型 |
---|---|---|---|
类 | Factory Method (工厂方法) | Adapter (类) | Interpreter (解释器) Template Method (模板方法) |
对象 | Abstract Factory (抽象工厂) Builder (建造者) Prototype (原型) Singleton (单例) |
Adapter(对象) Bridge(桥接) Composite(组合) Decorator(装饰者) Facade(外观) Flyweight(享元) Proxy(代理) |
Chain of Responsibility (职责链) Command (命令) Iterator (迭代器) Mediator (中介者) Memento (备忘录) Observer (观察者) State (状体) Strategy (策略) Visitor (访问者) |
更详细的分类可以看这里。
在安卓开发中,接触到的设计模式有:
- 单例模式,application 类的使用
- Builder 模式,Glide、AlertDialog 的使用。该模式是开闭原则的完全体现
- Adapter 模式,RecyclerView 适配器
- Java IO 库中,涉及到两个设计模式:装饰模式和适配器模式
- Retrofit中使用了外观模式和动态代理模式
- Okhttp 中 Intercepter 就是典型的职责链模式
- RxJava 是典型的观察者模式,Android 中,点击事件也是经典的观察者模式
参考资料在这里,留着慢慢看,慢慢补充吧