00:00
看一下设计模式的概述。那么设计模式现在我们已经具备了去学习设计模式的相关的基础知识。比如说我们已经知道了设计模式的。原则七个原则对吧,我们也知道了类与类之间,这个类他们的关系怎么用类图来进行描述。那现在呢,我们来看一下设计模式相关的一些概念,首先呢。我们掌握设计模式,它其实是有一个过程的,我这里总结了有这么几个层次,第一个呢,你刚开始学编程,如果你是刚开始学编程的朋友,那你。听说过什么是设计模式,你可能听过,但是你没有真正的去了解和去学习,对吧?第二层呢,就是你已经有一段时间编程经验了,你你已经做了一段开发了。自己也写了一些代码。但是你你也是你也用了一些设计模式,比如说常见的一些设计模式,比如说单利工厂。
01:04
你用了。但是你可能是。用了一些其他的设计模式,比如说你用了调节模式,解释器模式,但是你不知道自己已经用了,就你现在已经用过了,但是你不一定很清楚的知道,这就是设计模式第三层。你在编了一段时间成的过你。已经学过一些设计模式了。发现自己已经在使用,并且你也发现了一些新的模式,就是你可能用了五到六个。对吧,但是你会发现诶,还有一些新的模式,以前没有学过的,因为你没有系统学嘛,所以说第三层就是你已经学过设计模式,而且已经会用,但是你还没有学完。不是不够系统到第四层,第四层呢,相对来说比较高一点,这时呢,你已经开始。开始去看别人写的源代码,比如说高手写的源码,或者是你看一些底层框架的源码。这在里面呢,你发现诶,好像别人已经用过这个设计模式了,并且你已经可以领领会到设计模式的精妙和给我们带来的好处。
02:10
那这个层次呢,第四层就说明你已经。对设计模式有一个相对来说深入的了解。OK,到了第五层,代码写着写着呢,你自己在无意识中就已经开始设计模式,也就是说这个时候你已经有一个条件性的反射,当你去对一个功能模块进行一个设计的时候。你不自然的,因为你现在已经把设计模式学的差不多了,你不自然的就已经可以通过设计模式来完成这个功能,当然这个第五层就说明你已经不但学会了设计模式,而且可以怎么样灵活的应用设计模式,说第五层是我们追求的一个目标。那讲到这五层呢,我突然想起我们看过金庸小说,对不对,有个叫笑傲江湖啊不不,笑傲江湖是是那个什么,呃,有个孤独求败,孤独求败呢,他学武艺的时候也其实有这么几个过程,我们来简单的分享一下啊,一分钟过一下,孤独求败有五个境界。
03:14
那么第一个境界是他最先前呢,他用的是那种比较锋利的剑。啊,那个他觉得这个剑越锋利越牛。而第二个境界呢,他用的是这种软件,已经不够那么锋利了,但是他用软件,这就需要它的一个内力来支撑。OK,到了第三个阶阶段呢,他用的是重剑,重剑。它一点都不锋利,它是很沉重啊,重剑无锋,大巧不工。那也就是说,当。当一个人他这个学习一个技术,或者是进入到一个行业,到一定阶段的时候呢,他已经不再。不再是去追求这个很锋利的东西,而是追求他本质的一些东西,因为我们把一个人打败,或者把一个东西用好,其实并不在于形式,而是在于什么呢?而是在于我们这个结构和内在的一些东西,对吧?比如说你的算法呀,你的设计模式是不是更更加优化?
04:10
好,到了第四个阶段呢,他用的是木剑。啊,目前就是很轻,就是举重若轻,就是有一个很一一个问题很难,但是在你的面前,你可以轻轻松松的就把它搞定。比如说一个你在做开发的时候,你发现有很多同事正在为一个。比较棘手的问题,烦恼的时候,而你上去过后呢,你用一个你学到的知识,比如说设计模式也好,还是算法也好,你轻松的就把它搞定了。那你就到了木剑这个阶段,到了第五个间段就是无剑,那无剑就是我们所说的什么呢?就是你学一个技术的时候,就是已经信手拈来啊,什么意思,就是说呃,你看到一个问题,马上你你可能脑袋里面就很快的就反应出来,我应该用什么东西来解决。
05:02
那就是无见甚有见的境界,好了,那这个分享就到这儿哈,就到这儿我们就聊了一下,就是说我们学设计模式,包括我们学编程呢,也会有一个过程,因此你在学的过程中呢,一定要善于去总结和领会。去体会它的好处,而且我在前面讲过,设计模式呢,它不是站在或者说不仅仅是站在完成功能的这个角度来思考问题的。他不仅仅是站在完成功能的角度来思考问题的。再说一遍。而是站在什么呢?而是站在我们软件的一个什么呀,它是站在软件这个系统。系统或者说这个结构来思考这个问题的,因此你可能在学的过程中,你发现,诶,诶这个没有这么麻烦,为什么非要这么麻烦去做呢?因为他考虑的问题是一个结构,考虑是个系统,比如说这个系统的可用性,呃,它的这个复用性,它的灵活性,扩展性,维护性,规范性的问题,明白我的意思吧,好,这是呃几个层次,先聊到这儿。
06:07
那么设计模式呢?我再多聊几句,就是我们讲的内容是哪些设计模式,前面我们已经讲过了,他其实就是某类问题的通用解决方案。因为我们在做编程的共识过程中,你会发现A程序员,B程序员,C程序员,B程序员他们不他他在写项目的过程中,他们都会遇到一些普遍的问题,而这个普遍的问题呢,我们就把它抽取出来提供一个。呃,共用的大家都认同的一个解决方案,这就形成了模式,也就是代表一个最佳实践明白,那么这些方案呢,是众多的软件人员经过相长相当长的时间总结出来的。那怎么总结了一共多少种呢?好,我们来看一下设计模式本质,它是提高维护扩展通用,降低软件的复杂度而产生的。那么设计模式里面有一本,现在有一本经典的书。
07:03
这这本书有四个人写出来的,就这四个字,这个这个这个这个我就不去念了啊,名字老外的名字不太好念,我就不念了,四个字俗称四人帮。熟人吧,就是四个人,他写了一本设计模式,他提出有23种模式。当然这个模式是不是只有23种,或者说有没有其他人有不同的这个意见呢,现在也各有说法,各有说法,只是这一本书呢,因为他写的特别的经典,所以说在业界呢,大家就认为啊,那么这个这个书就认为是一个比较相对说大家认同度比较高的一种分类,就是他把我们这个设计模式分成23种,其实啊,你如果站在。站在不同角度来说,你可能会得到,可能还会有其他的,这也是有可能的,所以说我们在做开发的时候,不要呃完全被这23种所束缚。只是这23种已经把我们。绝大部分的情况都考虑到了。
08:00
绝大部分都考虑到了。你把这23种设计模式学完了,基本上可以应付我们开发的方方面面。但是并没有说,呃,也没有哪一个一个科学就像我们这个数学项那么精准化,就这23种,因为这23种可能还有还有变种,它在不同的情况下可能还会有一些微小的变化,从形式和实现方式也会有一些微小的变化,明白我的意思吧。好了,那么我们这个采取讲的呢,就主要是以这个这四个人写的这本设计模式23种为标准来展开讲解,还有一点我要强调设计模式呢,并不局限于某种语言。就说你Java程序员要用设计模式,PHP呢也会用,C加加呢也会用,只要你是做开发,他就会设计模式,因为设计模式它是站在软件结构和软件系统的角度来来看待的,那跟你的语言其实是并不局局限的。哦,OK,好,这是设计模式的这么四点需要了解,那么我们来看设计模式根据,呃,这个是就是我们刚才所设计模式那本经典的书,它是怎么分的呢?它一共把设计模式分成了333种类型,第一种是创建型模式。
09:17
听这个名字大家应该能够反应出来,它重点谈的是对我们对象的创建,应该怎么去设计,它是强调的对象的创建。的时候,我们应该怎么去设计我们的代码,那么里面分了这么几种,单利抽象工厂原型建造者和工厂模式,其实抽象工厂和工厂模式它是都是属于工厂模式的明白。都是属于工程模式的,好,那么单利模式它就是解决我怎么让一个系统里面只能有呃,某个类的实例只能有一个,就是单利模式解决的原型模式,它是解决的,我们去怎么克隆一个对象。啊,深拷贝还是浅拷贝,它是解决这个问题的。好,那么结构型模模式呢,有这么些,那结构型模式它是站什么呢?它是站在软件结构的角度来思考的,就是我刚才讲的软件,呃模式,它是站在这个系统和结构来思考的。
10:13
就是怎么让我们软件的结构更加具有这个伸缩性,有弹性,或者叫做有什么呢,有扩展性比较好,那针对这个结构类型呢,它有这么几种适配器。调接装饰组合外观,想源代理,你比如说装饰这模模式,它就能够你使用的装饰者模式就能解决内爆炸的问题。就是你如果不按照这个装饰者来设计,你的这个类就会变得很多,就会形成内爆炸,就有很多很多类让你无法去管理和维护。啊内爆炸他解决这个问题,因此这些呢,就是从结构上来解决我们这个代码的一个更合理的一种设计。还有一种就是行为型,行为大家都知道,行为主要是站在方法这个角度来思考和设计的,你比如说模板方模,呃,模板方法模式,那模板方法模式是干什么呢?他就是说我怎么去设计这个方法,让你更合理,你比如说我有个类A类,抽象类。
11:16
我下面有B类,有C类,有D类,那么。B继承C,也继承ad,也继承A,那么我们发现BCD他们呢,都会要去执行一个方法,比如说我们要去看一段代码执行的时间,那我怎么样呢?我可以把这个执行的这这个这个模板提到A里面去写,让BC来继承,然后B和C把自己实际的代码。在实现实际要去使用的代码,在实现用这个模板来完成。所以说这个就是行为型模式要解决的。它是站在什么呢?方法啊,就是怎么去让我们这个方法的调用更合理,方法的设计更合理的角度来进行这个,呃,这个这个设计的,比如说模板方法,命令模式,访问者迭代观察者,中介,备忘解释器,状态策略,责任链,你看责任链就是到时间我们方法都要用,是形成一个链状的,这个调完了过后再调下一个,再调下一个啊,那所以说它是一种行为型的。
12:24
啊,一种模式设计,所以说我们一共分三种,这个一定要记住啊,有可能面试官会问你创建型,结构型,行为型模式,还有一点最后我要给大家讲一下,就是有可能呢,你会发现,诶韩老师你这讲的这些模式我没有我没有听过呀,我有一个模式我没有听过。那我告诉大家,不同的书籍呢,对这个分类和名称会有略有差别。会略有一个差别,你比如说。这个责任链模式,有些地方就呃职责链模式,我这写的是职责链,那有些书上它就直接翻译的是责任链模式。
13:04
这这个是有可能的。啊,有可能的,所以大家这块呢,要要理解哈,就是因因为我们中国人把这个外国人的书翻译过来呢,可能不同的作者翻译会有一些小的差别,但总体来说不会有大的变化啊,就可能些微小的变化而已。明白好了,那关于设计模式的一个概述,我们就讲到这里,下面呢,我们就会开始按照我这列出的顺序,一个一个模式进行讲解,那先讲我们的创建型,再讲结构型,再讲行为型,一共有23种,我们全部。给大家讲完讲解的流程,前面我们已经讲过了,对吧?好,我把刚才讲的设计模式的概述给各位朋友简单的阐述一下。来,那我刚才讲的是设计模式的概述,屡屡。我们梳理一下设计模式的概述,讲了哪些内容?
14:00
首先呢,给各位朋友讲讲了一下,我们在学习设计模式的时候呢,要循序渐进。要学习渐进,也就是说我们一层一级一级来学,你现在可以根据老师的分类,你看一下你现在已经到第几层了。但有些同学说老师我还一我这个刚刚学编程,那你就处在第一层,如果你编程有一段时间,比如说你做开发做了两年,但是呢,你没有系统的学习。这个设计模式,那你可能是处在这一层的。第三层。OK。在第四层,第五层,其实相对来讲,你已经已经是有一些这个基础了,那你就可以有选择的听老师的,呃部分啊,有可能说你觉得老师这块讲的还不够深入,你你也可以提出自己的一些啊,你也可以参考一些其他书也是可以的明白,但整体呢,我们还是要详细的分步骤分层次的给他讲解。
15:00
大部分同学我想应该是在前三层,那你就要认真听了,对吧,你还没系统学习过吗?好的,那这个层次说完了过后呢,我们说了一下设计模式的一些呃,基本的介绍。那在这里呢,我给大家介绍了四点。介绍了四点,哪四点好,我们来捋一捋这四点。那么首先我们要知道这一点,就是设计模式,模式首先不是代码,它不是代码,是某类问题的通用解决方案。这1.1定要清晰,第二点呢,设计模式的本质,它要提高的是这些问题,它要解决的是这个问题,还有我们在讲这套设计模式的时候呢,主要是以这个四人帮,这个Golf,他提出的是23种设计模式来进行讲解的。还有一点呢,就是世界模式不局限于语言。如果是你是Java程序员,当然听起来会OK,如果你是PHP程序员,你会1.java也是可以听这个课的,因为PHP也会用到设计模式,C加加也会好的,这是设计模式的几点介绍,那下面呢,我们对设计模式它的类型和分类做了一点说明。
16:15
设计模式一共分几类呢?分三种类型,一共23种,哈三三个大的类型,我们这写着分三种类型,共23种。共23种,那么我们把它分别分成这么三大类。三大类一个呢,我们是从创建的这个角度来看,有这么些,从结构解决结构问题的来看呢,分这么多,从解决行为就是它的这个方法的设计层面上来看呢,分这么些,那待会儿呢,我们讲的时候就按照我们这给出的顺序依次展开讲解。各位关于设计模式的概述,我们就聊到这里。
我来说两句