开发者学堂课程【Scala 核心编程 - 进阶:设计模式的引入】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/610/detail/9131
设计模式的引入
内容介绍:
一、学习设计模式的必要性
二、掌握设计模式的层次
在前面学 JAVA 基础时,我们提到过设计模式,但是由于时间原因,讲得较为表层。在很多书中设计模式都很高大上,那么设计模式到底是什么呢?
有些设计模式有一些牵强,且应用产品也不太丰富,从本课起我们一起来重点学习一些在开发过程中使用较为频繁的设计模式。
一、学习设计模式的必要性
1、面试会被问,所以必须学
在面试过程中,一般都会问到几个常用的设计模式,如简单工厂模式、工厂方法模式、工厂模式、抽象工厂模式的区别,观察者模式与装饰者种模式的区别,什么是代理模式,抑或该种模式的价值怎样体现,以及以前学过的单例模式等等。
2.工作中使用亦很频繁
对于设计模式的学习不只是应用在面试中,更多是在工作中。当读别的原码时,尤其是读一些框架,大量就使用到设计模式。如果没有学习设计模式,读码会比较吃力。
如 Runtime 的单例模式,如果没有学习过单例模式,就会很难理解代码编写的一图。以一段简单的设计模式为例:
新建一个包chapter17,新建一个Test文件,输入以下代码:
package com.atguigu.chapter17
class Test
def main (args:Array[string]): Unit = {
java.lang.Runtime
}
查询可得到:
public class Runtime
private static Runtime currentRuntime =new Runtime();
//饿汉式的设计模式
private static Runtime getRuntime(){return currentRuntime;}
//静态方法,返回currentRuntime
private Runtime (){ }
//私有的
单例模式是最简单的一种设计模式,而复杂的设计模式会较难读懂,如今天学习的装饰者模式,我们要从代码的级别进行演示。
3.设计模式呢让专业人士之间交流方便
如两个成员交流时,说到“我的代码用到了装饰者模式”,如果没有学过相关知识,就无法进行便捷的沟通。
再如“动态代理”“静态代理”“防控型代理”等等。其他人使用的是专业术语,描述得十分简洁,如果不明白这些专业术语,就无法沟通。
4.提高我们代码的易维护性
后面大家从案例里就会体验到这一点。
5.设计模式是编程经验的总结,可以理解为:通用的编程应用场景的模式化、套路化。
在开发过程中有很多场景是相通的。很多项目里写代码时会遇到相同的需求。
就如,装修房子,遇到的需求都有必要,如房间很小但又想充分利用空间的问题,可以使用隔空间或者是用增强空间层次的方式让空间在视觉上更大等,也就是所说的模式化、套路化。
且站在软件设计层面去思考是十分必要的,曾经学习单例模式时,有人觉得单例模式毫无用处,整个程序里面只要有一个实例,而不要与第二个实例,这一点如果在写代码时保持细致完全可以解决,只要不创建两个实例即可。但是以交通出行为例,城市道路上时速要求不能超过40公里,如果单纯只考虑开快一点但保持小心,这样并不能最大程度上保证安全,只有控制好时速才能保证安全。同样在设计模式中,单例模式直接在设计层面上使得无法产生两个实例,而不是通过人为控制。
二、掌握设计模式的层次
1、刚开始学编程不久,听说过设计模式。
2、有很长时间编程经验,自行写了很多代码,其中用到过设计模式,但自己并不知道使用的是设计模式。
3、学了很多设计模式,发现自己已经在使用了,且发现新的模式很好用,真正地提高了编程效率。
4、阅读了别人的源码和框架,在其中看懂了别人使用的设计模式,。并且能够领会设计模式的精妙和带来的好处。
5、能够无意识地使用设计模式,并且使用的十分熟练,已经养成了习惯。
就像孤独求拜的五重境界
第一个境界是利剑,年轻时使用的剑特别锋利,无坚不摧;
第二个境界是软件,使用的剑已经软了,但仍旧厉害,紫薇软剑;第三个境界是重剑,重剑无锋,大巧不工;
第四个境界是木剑,剑很轻,但是摘花飞叶都能伤人;
第五个境界是无剑,可以无意识地使用。
学习设计模式是有一定过程的,通过不断地学习大家就可以体会到设计模式的好处了。