欢迎来到天天文库
浏览记录
ID:24331453
大小:52.50 KB
页数:4页
时间:2018-11-13
《学习设计模式的一些感想 》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、设计模式在编程中的应用我们在发现问题到解决问题这个过程中,常会发现很多问题是重复出现的,或是某个问题的变体,外在不同,而本质相同,建筑学上如是,软件行业也是,这些问题的本质就是模式。有人说,设计模式并不是一U两H能够理解的,当编程经验到丫一定程度,便迫切的需要设计模式来完善自己的代码、优雅自己的设计,以及减少重复编码,这句话也是蛮有道理的,以自己的亲身经历来说,当刚开始编程时,没有一点设计理念,等到开设这门课以后再细读理解,把里面的思想带到自己的项目中,就会觉得有很多值得深思的地方。本文以我在以往项目中遇到的三个编码问题來谈谈学设计模式
2、的必要性。一、代码最激增、程序可维护性面临挑战我想这样的代码我们从学习C语言就开始接触,现在很多地方还在用,以后工作可能用的更多侃是,大家都写的东西,我们自己的优势在哪里呢?L过多的■“•1m判断//调用获取信息方法■=2><"凋用获取信息方法2<"调用获取信息方法1>这是我在做一个项目屮看到的一段代码,那个条件判断非常之长,有个条件分支,而且其他有些地方也有根据类型来做不同处理的情况。2•多次载入资源(例如配賈文件的读取),引起资源损耗pllie格
3、b»
4、..•<:e^MesOi3
5、3、.b>O•;w4U«86、BB7、8、中,从l"®!中获取的值,并将其返回该段代码是我以前在一个项目屮写的一段代码,该段代码用于读取配置文件的属性,但该段代码是存在一些W题的,W为在每次获取属性时,它都重新载入资源,造成/资源的过多损耗。3.过多依赖实现类I)水果接口类一2)水果的实现类一"略3)测试类一為8<«9、■pllfevdiuL-■*B^8>«r,M»在我们的项g中尚未采用时,类似这样的程序很多,与实现类的过度耦合是这段代码存在的一个主要问题。在我编码的过程屮,遇到的问题还有很多。不够优雅的代码、过于僵硬的设计,等等,通过改进如上编码来认识学习设计模式给10、我们的编码带来的好处。二、借“设计模式”之力冲出代码包围圈如上的三段代码,都是存在不少问题的,让我们一一讨论,通过在其中应用设计模式,来优化我们的这三段代码,提髙其扩展性和易维护性。I解决过多的•乂*判断问题如果在一段代码中,不少地方需根据某类型或状态等做出不同的处理,那:当类型或状态增加时,这些代码将会过于偎硬,扩展性差,只有在各个分布丫*■•••!»的再增加一个可维护性可想而知。设计模式屮有一种模式可以解决该问题,即状态模式。状态模式给我们带来的好处如下.•1)状态模式需要对每一个对每一个系统可能取得的状态创立一个状态类(He)的子11、类,当系统的状态变化时,系统改变所选的子类。与一个特定的状态有关的行为都被包装在一个特定的对象里,而且当需耍增加新的状态时,可以以子类的方式将它加到系统里,从而提尚丫易维护性和可扩展性;2)山于每一个状态都被包装到了类里面,避免了使用过多的条件转移语句。下面我们对该例进行演示性的改进。我们可以定义一个类型接U,该类相当于状态模式中的状态类。Ibilk<■林取信fl、■blk/林*获取结果pilie8类型I、类型2等可以实现该接口,代码略:X解决过度资源损耗问题在该例屮,每次通过方法获取某属性时,都会®新载入文件中的所有内容,造成资源12、的不必要损耗。该设计模式屮,对于此种惜况,可以通过单例(SAfk)模式来优化处理。■■Mi//略L13、14、=nuitliPib15、f画ILv•国•••16、—17、irfiaA18、为空吋,载入文件,将其键值对放入中<略>»//在19、sL20、中获得■■•!«*,属性,并将值返回(略)可以考虑实现单例模式的地方还有很多,例如:■)对于计算机的外部资源打印机的情况,因只有一个PiA如■■Siedei为避免两个打印作业同吋输出到打印机中,可考虑用单例模式实现。2)11狄<的回收站在整个系统中只有唯一的一•个实例,而且回收站自行提供自己的实例,回21、收站I是单例模式的应用解决过多依赖实现类问题在该例的测试类jju中,通过r»«i<*22、23、1•:^列>^24、25、1<>1來获得对象,造成了程呼记多的依赖实现类,与实现类过度耦合,学习设计模式后,我们可以考虑采用工厂模式来实现,B对代码进行如下改进:增加工厂类该类的工厂方法如下:IullfeH.MTzie>...26、■•m€wmCm*27、28、•••«,‘■F•^LlsMb^d29、s<...<■H.hnuiHj»>增加了水果工厂类后,测试类也要做对应修改,修改后的的iub方法如下.•『■Mr*iMC^afl•rC»30、131、I在进行了对应修改后,测试类大大减少了对水果实现类的依赖,由直接实现类变成了通过传入字符串來获得需要的实例,工厂模式应用很广泛,例如在现在红得似火的也在不少地方用了工厂模式,它本身就是一个很大的工厂,不过它
6、BB
7、
8、中,从l"®!中获取的值,并将其返回该段代码是我以前在一个项目屮写的一段代码,该段代码用于读取配置文件的属性,但该段代码是存在一些W题的,W为在每次获取属性时,它都重新载入资源,造成/资源的过多损耗。3.过多依赖实现类I)水果接口类一2)水果的实现类一"略3)测试类一為8<«
9、■pllfevdiuL-■*B^8>«r,M»在我们的项g中尚未采用时,类似这样的程序很多,与实现类的过度耦合是这段代码存在的一个主要问题。在我编码的过程屮,遇到的问题还有很多。不够优雅的代码、过于僵硬的设计,等等,通过改进如上编码来认识学习设计模式给
10、我们的编码带来的好处。二、借“设计模式”之力冲出代码包围圈如上的三段代码,都是存在不少问题的,让我们一一讨论,通过在其中应用设计模式,来优化我们的这三段代码,提髙其扩展性和易维护性。I解决过多的•乂*判断问题如果在一段代码中,不少地方需根据某类型或状态等做出不同的处理,那:当类型或状态增加时,这些代码将会过于偎硬,扩展性差,只有在各个分布丫*■•••!»的再增加一个可维护性可想而知。设计模式屮有一种模式可以解决该问题,即状态模式。状态模式给我们带来的好处如下.•1)状态模式需要对每一个对每一个系统可能取得的状态创立一个状态类(He)的子
11、类,当系统的状态变化时,系统改变所选的子类。与一个特定的状态有关的行为都被包装在一个特定的对象里,而且当需耍增加新的状态时,可以以子类的方式将它加到系统里,从而提尚丫易维护性和可扩展性;2)山于每一个状态都被包装到了类里面,避免了使用过多的条件转移语句。下面我们对该例进行演示性的改进。我们可以定义一个类型接U,该类相当于状态模式中的状态类。Ibilk<■林取信fl、■blk/林*获取结果pilie8类型I、类型2等可以实现该接口,代码略:X解决过度资源损耗问题在该例屮,每次通过方法获取某属性时,都会®新载入文件中的所有内容,造成资源
12、的不必要损耗。该设计模式屮,对于此种惜况,可以通过单例(SAfk)模式来优化处理。■■Mi//略L
13、
14、=nuitliPib
15、f画ILv•国•••16、—17、irfiaA18、为空吋,载入文件,将其键值对放入中<略>»//在19、sL20、中获得■■•!«*,属性,并将值返回(略)可以考虑实现单例模式的地方还有很多,例如:■)对于计算机的外部资源打印机的情况,因只有一个PiA如■■Siedei为避免两个打印作业同吋输出到打印机中,可考虑用单例模式实现。2)11狄<的回收站在整个系统中只有唯一的一•个实例,而且回收站自行提供自己的实例,回21、收站I是单例模式的应用解决过多依赖实现类问题在该例的测试类jju中,通过r»«i<*22、23、1•:^列>^24、25、1<>1來获得对象,造成了程呼记多的依赖实现类,与实现类过度耦合,学习设计模式后,我们可以考虑采用工厂模式来实现,B对代码进行如下改进:增加工厂类该类的工厂方法如下:IullfeH.MTzie>...26、■•m€wmCm*27、28、•••«,‘■F•^LlsMb^d29、s<...<■H.hnuiHj»>增加了水果工厂类后,测试类也要做对应修改,修改后的的iub方法如下.•『■Mr*iMC^afl•rC»30、131、I在进行了对应修改后,测试类大大减少了对水果实现类的依赖,由直接实现类变成了通过传入字符串來获得需要的实例,工厂模式应用很广泛,例如在现在红得似火的也在不少地方用了工厂模式,它本身就是一个很大的工厂,不过它
16、—
17、irfiaA
18、为空吋,载入文件,将其键值对放入中<略>»//在
19、sL
20、中获得■■•!«*,属性,并将值返回(略)可以考虑实现单例模式的地方还有很多,例如:■)对于计算机的外部资源打印机的情况,因只有一个PiA如■■Siedei为避免两个打印作业同吋输出到打印机中,可考虑用单例模式实现。2)11狄<的回收站在整个系统中只有唯一的一•个实例,而且回收站自行提供自己的实例,回
21、收站I是单例模式的应用解决过多依赖实现类问题在该例的测试类jju中,通过r»«i<*
22、
23、1•:^列>^
24、
25、1<>1來获得对象,造成了程呼记多的依赖实现类,与实现类过度耦合,学习设计模式后,我们可以考虑采用工厂模式来实现,B对代码进行如下改进:增加工厂类该类的工厂方法如下:IullfeH.MTzie>...26、■•m€wmCm*27、28、•••«,‘■F•^LlsMb^d29、s<...<■H.hnuiHj»>增加了水果工厂类后,测试类也要做对应修改,修改后的的iub方法如下.•『■Mr*iMC^afl•rC»30、131、I在进行了对应修改后,测试类大大减少了对水果实现类的依赖,由直接实现类变成了通过传入字符串來获得需要的实例,工厂模式应用很广泛,例如在现在红得似火的也在不少地方用了工厂模式,它本身就是一个很大的工厂,不过它
26、■•m€wmCm*
27、
28、•••«,‘■F•^LlsMb^d
29、s<...<■H.hnuiHj»>增加了水果工厂类后,测试类也要做对应修改,修改后的的iub方法如下.•『■Mr*iMC^afl•rC»
30、1
31、I在进行了对应修改后,测试类大大减少了对水果实现类的依赖,由直接实现类变成了通过传入字符串來获得需要的实例,工厂模式应用很广泛,例如在现在红得似火的也在不少地方用了工厂模式,它本身就是一个很大的工厂,不过它
此文档下载收益归作者所有