设计模式学习总结(部分三种)

设计模式学习总结

1 设计模式总的认识

刚开时学习设计模式的时候,感觉学这个没有什么用,因为好多东西都是比较抽象的,难以总结出来,很难写到自己的代码里,感觉自己以前写代码的时候,好像也没有用设计模式。但是随着老师的讲解,和自己学习的深入,对这个设计模式了解的越多,我们会发现,在自己写java项目的时候,处处都需要使用设计模式。
这里就简单的叙述一下我的感受。设计模式这个东西确实是一个好东西。他站在一个比较高的角度,为我们总结和凝练了许多的技巧思路,方法和技巧。拥有者前任的积累和整理从而方便大家,通过设计模式科以是我们的软件更加的灵活,模块之家的耦合性降低,效率提升。如今,设计模式已经得到了广泛的应用,我最近学习的ssm框架中使我印象最为深刻,MVC中迭代器模式的大量应用,让我们更好的理解MVC的作用和意义。这些设计模式历经岁月的洗礼,每一个都有自己的精华之处,还是需要带我们这些后辈深思熟虑。但是我们在学习的过程之中可能会有一个严重的误区,就是我们必须严格的套用设计模式,而不能灵活的改变。虽然他叫模式,但是我们不应该只注重模式二字,而更应该思考用这种设计思路,能给我们的软件带来什么样的变化。设计模式最核心的部分就是设计的思想,而并非设计的结构。只有掌握了设计模式夫人核心思想,才能正确的,灵活的应用设计模式,否则我们写的设计模式,不过是生搬硬套而已。
然而,经过一个学期的学习,我也并没有完全掌握设计模式的大部分,要做到运用设计模式,首先要掌握设计模式的意图和结构。要想了解设计模式的意图,就需要我们去了解为什么要使用这个模式,也就是需求的问题。结构就是如何去解决这个问题,是一种手段。只有把这两个方面的知识掌握之后,才能抓住一种模式的本质和核心。当让大量的练习模式的应用也是必不可少的训练。
虽然设计模式比较好,但是再好的东西也有自己的缺点。我们认为设计模式是为了让软件更加灵活,重用性更加的好。但是在某个方面,他自己也增加了软件维护的拿督,特别式对象之间关联的复杂度提高。应用设计模式固然会有一定的好处,但是会导致实际周期加长,软件设计更复杂,很多项目早在我们设计的时候就已经没了,你用了再多的设计模式,再好的设计思想也如泡影,灰飞烟灭。因此我们在设计程序的时候需要权衡利弊,使用合适的方法去完成我们的项目。

2 设计模式认识(具体)

之后我便总结一下我自己至一学期中最深刻的三个模式的认识。
2.1观察者模式(observer)
观察者模式,的设计模式的意图:定义对象之间的一种一对多的依赖关系,单发一个对象的状态发生改变的时候,所有依赖与他的对象都会得到通知并被自动更新。其实就像写算法的函数一样,比如我们写了一个sort()排序函数,本来c++中定义的sort函数的意思,如果我们改变(sort(a,a+n,cmp))cmp()函数改变原来的排序方式,那么,所有调用我们方法的进行排序的数组都会发生改变(会根据我们写的函数的排序方式)。这个函数其实就用到了我们的观察这模式,在cmp函数和对应排序的数组建立了一对多的联系,并且利用了这种模式,对代码进行维护。观察者模式首先构造了一个观察者类,在这个类中具有一个update函数,被依赖的对象(拥有这个观察者类),依赖的对象发生变化的时候,就调用了update函数更新更新所有依赖它的对象。更新方式是由update函数具体实现。在我们具体的生活中的例子,就是各个部门之间进行通讯,当一方发出新的信息时,按照传统的方法必须告诉所有的其他部门。如果使用观察者模式的方式,产生新的消息的一方只需要告知观察者类,有观察这类通知替他部门。

2.2外观模式(Facada)

外观模式的目的就是给子系统一个统一的接口。现在写的项目或者软件大多时用模块化的方式进行开发,对不同的模块进行编程。但是在用户的角度看来,不同的模块需要用通一的接口,即我们可以通过统一的接口访问系统中的所有功能。在代码中有一个很经典的案例,divc++编译器系统,通常我们可以将编译系统分解为:编译和链接,在我们运行代码之前,都需要对我们的代码进行编译,在比编译之后才可以进行链接和执行。而编译的过程又包括代码的语法分析,语义的分析,中间代码的生成扽等不走。对于用户来说,我们只是点了编译的那个按钮,软件就会对我们的代码自动进行编译,程序员不可能吧这些模块提供给用户,让我们调用。而是提供了一个统一的接口,使用户可以方便的调用各个功能。外观模式再强调模块化开发的同时也强调模块的统一,统一的接口也有利于子系统中模块化内部的变化。对于较大的项目中,外观模式时必不可少的。
2.3工厂方法模式(抽象工厂模式Abstract Factory)
这个模式关键就是设计一个抽象工厂的接口,这个接口提供了一系列抽象函数来创建各种对象。这个模式的意图就是使用一个统一的接口用以创建不同的具体对象(其中会出现一个产品族的概念就是抽象的产品)。举个例子,就像我们子啊不同配置的计算机上进行显示和打印任务,对于高配置的计算机拥有者较高的分辨率的驱动,而低配置的机器上使用较低的分辨率的驱动。在这种场景下,我们可以把显示驱动看成产品A(产品族),可以把打印驱动看成产品B(产品族),每种驱动都有两种分辨率分别对应着这两种配置。这个时候我们在创建系统驱动配置的时候,我们就可以使用工厂方法的模式,位高低两种配置实现两个具体的工厂类,分别用于创建对应的驱动。所有的用户不用关心当前是什么配置的计算机,而只需要统一调用的抽象工厂接口就可以了。使用者个模式,使用户无序关心具体的环境,降低代码的耦合度,是程序结构更加的清晰。但同时需要程序员对产品对象具有良好的设计,以至于用户可以不需要关系具体产品是那种类型就可以通过抽象产品的接口使用这个产品。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值