为什么要学习设计模式?看完这篇你就懂了!

为啥要看

  • 项目更好维护
  • 实现更优雅
  • 读源码更轻松
  • 理解面向对象

设计模式是解决很多问题的更优雅的实现,很多项目难以维护或者难以拓展都是因为设计的时候很多没有做好。

当然这里一开始只有最简单的 GoF23种设计模式,后面会考虑将Spring或者其他源码里面抽出,结合设计模式来讲,可能会更好一些

很多优秀的开源组件框架都大量用到设计模式,很多时候你看不懂,或者读起来也就那样,没有那种原来如此,令你眼前一亮的感觉。其实就是设计模式你还没有理解。比如我一开始看Spring的Ioc实现原理,我根本没有看出来他哪里优秀了。怎么就来了个革命性的成果呢(我当时没有读设计模式,代码写的也少)

现在看,跟以前看是不一样的,不过仍然还是没有抓住他的要点。毕竟设计模式的思想真的他高深了

学习前应当注意

抽象类和接口的区别

  1. 抽象类中的方法可以是具体类,也可以是抽象类(具体可以看Tamplate模式的使用)。接口全部是抽象类,且公共
  2. 抽象类需要继承,接口需要实现。这两个的区别主要在 父类多的情况下,Java继承只能单继承,但可以实现多个接口。(比如我们在Adapter模式的时候,他有两种实现方式,一种继承,一种委托。一个使用接口,一个使用抽象类)
  3. 欢迎补充,暂时想到这么多。之前想到了没有记下来,忘完了

使用抽象类和接口的目的

  1. 声明和实现分离,便于直观了解
  2. 弱化各个程序间的耦合,实现可复用
  3. 各个处理流程在抽象类阶段确立
  4. 如果传入的是他们两个的父类,调用者并不需要知道具体的是哪一个子类,(参考Composite模式,其实基本上大部分都会体现,如第一个Iterator模式,在我们BookShelf调用BookShelfIterator的时候,用于返回的是Iterator,而不是BookShelfIterator。不过Composite模式更直观)

面向对象

在我第一个节点,为啥要看设计模式的时候有一个理由写道,理解面向对象。很多人可能会不太服,我学了面向对象语言(如Java)那么久,早就已经掌握了面向对象的思想。从开始学Java的时候,就天天提到面向对象的三大特性,封装、继承、多态。傻子都背熟了,面向对象也没啥难的。

真的是这样吗?我们说到Java是一个面向对象的语言,皆可对象,所有的都可以当作对象来处理,就连8个基本类型,都有他们的装箱类。我们只要将东西抽象成对象就行了。是这样吗?

如果你只是按照上面的来想,那真的就太太太小看面向对象了。

对象

如果按照上面的逻辑理解面向对象,那么C语言也可以称为面向对象的语言了。因为他可以定义 Struct,结构体,和Java这种面向对象语言的样子很类似。所以这个并不能使一个语言成为面向对象的语言

关键还是忽略了,面向对象的强大的后面两个——继承、多态。我入职第一周,写程序。写出来是面向过程的,老大让我把程序改成面向对象的。然后我就定义了几个类,将变量值改成对象的属性。(想想还是憨)

我们老大说,你这不还是面向过程吗?面向对象体现在哪里? 连个继承和多态都没有。

后来我定义了个抽象父类,勉勉强强算是打成了改成面向对象的目标。

所以,仅仅只有类和对象,是不能被称为面向对象的

继承、多态

继承是多态的前提条件。只有有了继承,并且重写了父类的方法,才会有多态

但是我们一写到程序里,往往

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值