思维方式之设计模式

来源:互联网 发布:php点击按钮执行函数 编辑:程序博客网 时间:2024/04/29 12:01

          最近进行的学术交流会,主要是对数据库,软件工程,UML,设计模式几方面的知识进行梳理和交流的会议,现在算是告一段落,今天就对学术交流会中学到的知识和感触做一下总结,我觉得以倒叙的形式开始,因为今天的印象比较深刻,之前的在整理笔记后在进行分享。

         今天和前天进行的是设计模式,前天主要是对大话设计模式中涉及到的六大原则进行分析,这里要说的重点并不是这六大原则是什么,而是在讲解着六大原则的时候遇到的问题:

        一、定义模糊不清

       其实这个问题这样说不知道是不是合理,情况大概是这样:其中有一个原则是:单一职责原则,它的定义是:就一个类而言,应该仅有一个引起它变化的原因。

       其中有冲突的地方是:有人觉得到现在为止还没有遇到过引起类变化的原因,有人认为如果一个类引用多个其他类的方法,那么这个类就会有多个变化原因,还有就是需求改变时引起类的变化。

        其实我在看书的时候似乎就没有想过这个问题,现在拿到这里来讨论我似乎也迷茫了,听着每个人说的都头头是道,然而若都有道理这就是矛盾的,当然最后被我信服的是需求改变时引起的变化,这就要求在系统设计时创建合理的类,增强代码的复用性和可维护性。

        当然这可能不算是一个大的问题,然而我觉得我们大多都是通过资料自己学习,这时候理解上难免有偏差,所以我们需要交流,还有就是虽然我们提倡囫囵吞枣的学习方式,但是并不代表我们可以什么都不用想,看一遍就过。我们更需要的是有自己的理解。

       二、相似知识区分不清(弄不清楚本质)

           我不知道其它同学的感受但是对于我而言,我觉得太听抽象类和接口的时候,我是模糊的,对于这两个概念我只能说出他们的区别是:接口不可被继承,没有实现,一个类可实现多个接口,而抽象类有实现,一个类不可继承多个抽象类,且子类必须对抽象类各方法进行重写。

        可以要是问我什么是抽象类,什么是接口,我似乎还真是答不上来,我知道到他们的特点了,然而却不清楚他们的到底是什么东西,(当然在讲课的时候很多人也纠结,说明这不是我个人问题,在一定程度上这是通病)

       最后是通过师哥一个例子来弄清楚(其实这个例子在树上又讲过),下面用一张图表示:


        其中还提到两个很相似的名词就是重写和重载,首先方法的重写是在子类继承父类时,以自己的方式实现父类的方法,方法的重载就是创建同名的多个方法,但是参数类型和个数必须有所不同(在同一个类中)。

       由此可见在学习的过程中,我们会遇到很多相似的知识点,只有我们了解清楚每一个是什么,知道他们的相同和不同,我们才算是掌握了这个知识!

        以上是前天听设计模式的感受,虽然前天也有讲设计模式的行为型,但是印象不深,就不做介绍了。

       

       下面是今天讲设计模式时学习的内容,怎么说呢,只要是米老师讲课就会感触很深,总有种一语惊醒梦中人的感觉,然而就如老师所言:老师的话和自己的行动中间隔了一道城墙,总是也做不到位,所以学习起来费力不讨好。下面是对今天讲课内容的总结:

         一、老生常谈,但永远记不住的:思想上移,行动下移

          大话设计模式看过去有一段时间了,总共讲了23个,分为三种类型,这个我们是知道了,因为书上就是这么说的,我在学习设计模式的时候画过一张导图,由于当时觉得没有什么内容就没发出来,现在发出来批判一下自己:


         虽然这张图是分了类的,但是直到今天为止我依旧是不明白为什么分为这三类,直到今天老师实在是无法直视为止。

         之所以是结构型是连接类之间的关系,就拿外观模式来说就是将几个类整合到一起为用户提供一个简答的接口;创建型是在需要创建类型或者类时应用,例如:抽象工厂模式,通过创建工厂接口和数据库类的接口,实现了解耦;行为型涉及到方法,例如:观察者模式,就是通过观察被观察者的某种方法实现观察类的变化。这就想到为什么我们努力的但是效果不明显,就是因为我们照搬书本知识,没有自己的理解,而且不去往深里想问题。知识就是停留在表面,说什么知道,用什么不会用。。。这就是我的现状,多思考才可以把知识变成自己的,只要再多思考一步,将会是更大的一片天空,所以思想要上移。

      对于这么多设计模式,如果只是看过了书,那当然是不够的,行动下移讲的就是在做各个项目的时候用到设计模式,显然这一点我木有做到,因为在个人版的机房收费系统中我只用到了外观和抽象工厂+发射;所以说如果想用得好就要在实践中努力用。

          二、知识与经验的有效结合(思考问题的角度和方式)

               这一点可能对于我这个不是讲给我这个听课者的,但是这也是在告诉我一种思考问题的方式,在学习过程中我们要不断地用自己和大家都明白的事把知识整合,拿设计模式来说,如果在想到抽象工厂的时候我就会知道如果拿机房收费问题来讲:抽象工厂有利于将B层和D层进行解耦。外观模式就是在U层和B层中加一层来整合B层逻辑,这样U层就不用知道B层,外观就为用户提供了简单接口,便于调用。

          还有就是用简单的方式思考问题,不要总想着这样不行,那样不行,其实除了一个合适的其他都是不行的,不需要一一列举,我们在学习的时候总是把自己从一个不明白的深渊带到另一个不明白的深渊以至于学习类而且效率低。这些都要慢慢改正。

           这两天的总结暂时就这么多,前些天的整理出来再跟大家分享。

          

 

原创粉丝点击