设计模式是一种神奇的存在,偶尔被提及,时常被忘却,于我而言也是如此,或许只要在面试的时候才能想起来有这么一回事。
很多“知识”都是这样的,看过的那叫信息,懂了的那叫知识,会用的那才叫能力。能力的习得往往都是一个从“有形”到“无形”的过程。上学的时候只是记住了面向对象的三个特性:封装、继承、多态,现在越发觉得这简单的三个词背后蕴含着深刻的编程思想。从“有形”的概念到“无形”的运用,这中间要经历大量的思考与实践,不然就永远停留在“有形”的概念上(这已是万幸,更多的时候是无形地就忘记了)。
学习编程艺术首先要学会基本的规则,然后才能知道什么时候可以打破这些规则。—— Effective Java
设计模式就是这么一种有形的存在,它描述了类之间各种各样的构型关系,是面向对象实践经验的一种总结,你可以把它看作是面向对象编程对于某类问题的一种“最佳实践”。“最佳实践”是这样一种存在:你可以选择无视,这并不影响你用你的方式解决问题,但是最佳实践会让你解决问题变得更加轻松灵活(当然,前提是你运用得当)。
Keep in mind that design patterns are solutions to problems, not solutions finding problems; so don't overthink.
设计模式是用来解决问题的,而不是用来发现问题的。
本文主要围绕经典设计模式在Kotlin上的实现,Kotlin有自己的语言特点,对于设计模式的实现有时也不同于Java(当然对于多数设计模式而言,Kotlin的实现也没有什么特别的),我们可以写出更加Kotlin味道的设计模式。我猜测JetBrains在创造Kotlin的时候,“严重”参考了两本书:Design Patterns 和 Effective Java,其中一些思想已经内化到Kotlin语言中,之后我们会慢慢看到。
本文主要参考了以下内容:
Dive Into Design Patterns
图解设计模式
Effective Java 第三版
构建型设计模式(Creational Design Patterns)
- 简单工厂(Simple Factory)
- 工厂方法(Factory Method)
- 抽象工厂(Abstract Factory)
- 构造者(Builder)
- 原型(Prototype)
- 单例(Singleton)
应用
设计模式在外卖营销业务中的实践
浅谈基于常用设计模式的扩展
构建型设计模式的典型应用那必须得说是Dagger了,Dagger生成的源码包含了各种工厂模式,构造者模式,单例模式——Dagger生成的代码是什么样的?
责任链+策略模式=责任树模式——曾梦想 if-else 走天涯?看看“责任树模式”优化
P.S. 本文会持续更新,不定期来看看,说不定会增加什么奇怪的知识。
网友评论