# 为什么要写设计模式
设计模式,应该是一个比较老生常谈的话题了。在网络上或者书店里,随便一搜都是一大把的文章。
虽然看过这么多的文章和书籍,在写代码的时候,总是会有一种,摸到键盘就忘记所有的困境。这是为什么呢?
什么SOLID
原则,23中设计模式的名称都信手拈来。就是一种,道理都懂,但就是过不好这一生的感觉。
其实,这是认知层次的问题。我们只知道是什么,但是没有达到认知的下一层,如何应用。
# 是什么与应用的差距
拿设计模式中的Builder
模式举例,它的定义:
用于构建复杂的对象,用同样的构造过程来创建不同的表示
上面这句话定义了构建Builder模式是什么
看了上面的这个定义,不经会有疑问。
- 什么样的算是复杂对象?
- 代码超过一千行?
- 包含20个属性或者20个方法?
- 不同的表示是什么意思呢?
- 是多态的子类
- 调用同一个方法的表现行为不一样
- 还有创建过程怎么和行为进行分离?
- 用构造函数?是否会太冗余
- 内部类?
- 还是其它java或者C++等一些语言的语法糖实现?
对于一些看过很多书籍和博客的程序员来说,更多看到的是一个简单的UML类图和一些文字描述,再辅助一些伪代码。对上面的一些问题,很难在看完之后有明确的答案。
对于builder模式
,就有这么多疑问。那么,对于其它22种
模式,想必各位程序员会有更多疑问。
作为有同样感触的我,希望做出一些改变。来解决自己的一些困惑&加深对这些模式的理解
# 如何深入的理解
# 首先
还是需要俗套的定义一门语言,使用Java
来辅助深入理解。
- 因为上面举例的
builder模式
所提出来问题的解答需要和语言相关,这些问题在不同语言下的回答可能不一样。 - 术业有专攻,作为一名
Javaer
,用java来回答可能准确性和专业性会更高。
# 其次
在GOF
的设计模式或者其它万千书籍和博客的基础之上,提出自己以Java
语言为基础的相关疑问和一些思考。主要有以下几点考虑:
- 以语言相关的疑问,能够帮助我们自己在使用中更好的代入感
- 在知名书籍的解答下代入自己的提问,以便能够更深入理解
# 再者
虽然大多的讲解里都会列出UML和相对应的代码。比如Builder模式
:
class ProductBuider{
Product build();
ProductBuider buildPart1();
ProductBuider buildPart2();
}
class Product{
private String part1;
}
2
3
4
5
6
7
8
这种模式代码层面的讲解和举例,虽然把模式的主要含义表示出来。但是,却很难给人充分和深刻的理解,有一种似懂非懂的感觉。
什么样的代码举例,能够非常清晰和有深度的呢?
那么,就非生产级别的代码莫属了。生产环境应用相关模式的代码,应该是更加贴近实际场景的。
选取那些生产环境的代码呢?
这里选取了github
上非常热门的几个java
开源库进行研究和分析,通过学习高水平的代码,来得出更加深入的应用。
它们是:
通过对这些开源、工业级的代码里设计模式的实际应用的分析,来达到更加深入和深刻理解。