为啥要看
- 项目更好维护
- 实现更优雅
- 读源码更轻松
- 理解面向对象
设计模式是解决很多问题的更优雅的实现,很多项目难以维护或者难以拓展都是因为设计的时候很多没有做好。
当然这里一开始只有最简单的 GoF23种设计模式,后面会考虑将Spring或者其他源码里面抽出,结合设计模式来讲,可能会更好一些
很多优秀的开源组件框架都大量用到设计模式,很多时候你看不懂,或者读起来也就那样,没有那种原来如此,令你眼前一亮的感觉。其实就是设计模式你还没有理解。比如我一开始看Spring的Ioc实现原理,我根本没有看出来他哪里优秀了。怎么就来了个革命性的成果呢(我当时没有读设计模式,代码写的也少)
现在看,跟以前看是不一样的,不过仍然还是没有抓住他的要点。毕竟设计模式的思想真的他高深了
学习前应当注意
抽象类和接口的区别
- 抽象类中的方法可以是具体类,也可以是抽象类(具体可以看Tamplate模式的使用)。接口全部是抽象类,且公共
- 抽象类需要继承,接口需要实现。这两个的区别主要在 父类多的情况下,Java继承只能单继承,但可以实现多个接口。(比如我们在Adapter模式的时候,他有两种实现方式,一种继承,一种委托。一个使用接口,一个使用抽象类)
- 欢迎补充,暂时想到这么多。之前想到了没有记下来,忘完了
使用抽象类和接口的目的
- 声明和实现分离,便于直观了解
- 弱化各个程序间的耦合,实现可复用
- 各个处理流程在抽象类阶段确立
- 如果传入的是他们两个的父类,调用者并不需要知道具体的是哪一个子类,(参考Composite模式,其实基本上大部分都会体现,如第一个Iterator模式,在我们BookShelf调用BookShelfIterator的时候,用于返回的是Iterator,而不是BookShelfIterator。不过Composite模式更直观)
面向对象
在我第一个节点,为啥要看设计模式的时候有一个理由写道,理解面向对象。很多人可能会不太服,我学了面向对象语言(如Java)那么久,早就已经掌握了面向对象的思想。从开始学Java的时候,就天天提到面向对象的三大特性,封装、继承、多态。傻子都背熟了,面向对象也没啥难的。
真的是这样吗?我们说到Java是一个面向对象的语言,皆可对象,所有的都可以当作对象来处理,就连8个基本类型,都有他们的装箱类。我们只要将东西抽象成对象就行了。是这样吗?
如果你只是按照上面的来想,那真的就太太太小看面向对象了。
对象
如果按照上面的逻辑理解面向对象,那么C语言也可以称为面向对象的语言了。因为他可以定义 Struct,结构体,和Java这种面向对象语言的样子很类似。所以这个并不能使一个语言成为面向对象的语言
关键还是忽略了,面向对象的强大的后面两个——继承、多态。我入职第一周,写程序。写出来是面向过程的,老大让我把程序改成面向对象的。然后我就定义了几个类,将变量值改成对象的属性。(想想还是憨)
我们老大说,你这不还是面向过程吗?面向对象体现在哪里? 连个继承和多态都没有。
后来我定义了个抽象父类,勉勉强强算是打成了改成面向对象的目标。
所以,仅仅只有类和对象,是不能被称为面向对象的
继承、多态
继承是多态的前提条件。只有有了继承,并且重写了父类的方法,才会有多态
但是我们一写到程序里,往往