`
handsomeliuyang
  • 浏览: 314928 次
  • 性别: Icon_minigender_1
  • 来自: 益阳
社区版块
存档分类
最新评论

看模板方法模式的顿悟

 
阅读更多


  设计模式,这个词听起来真的有种很高深没测的感觉,很想去弄懂它,总感觉要想成为技术大牛,如果连这个都弄不懂,就感觉太差劲了,但每次下定决心去看时,总是看不进去,要么觉得其中的术语太过于正式,很难看懂,还有就是总感觉看了也用不上。

  但今天在看模板方法模式时,才发现我已经使用过这个模式,只是自己不知道它就叫模板方法模式而已。

  首先我们来看模板方法模式的书面定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这个定义实在是太讳涩了,我的理解是,如果我们有两个有很多相似代码的类时,我们常常会抽出一个公共的抽象类,把相同的代码放到这个抽象类中,同时把不同的代码,用抽象方法来代替,这些抽象方法再让子类去实现。其中的抽出来的公共的代码可以称之为算法的骨架(解决问题的主要步骤),由子类来实现的抽象方法就是将不同的一些步骤延迟到子类中。

  我们平时的把相同的代码抽到父类中去,其实这就是模板方法模式的思想,这个思想我们经常遇到,比如Activity这个类,其固定不变的生命周期方法,就可以认为是算法的骨架,我们通过继承这个类,实现其中的每个生命周期的方法,这就是将一些步骤延迟到子类中去。

  我们常常把相同的代码提到抽象的父类中去,也就我们常常用继承来实现模析方法模式,但这个方法有一定的局限性。我在写一套显示图片的缓存机制的时候,遇到了一个问题。问题是这样的,之前使用这套图片缓存机制的地方都是在ListView,GridView,GalleryView上,所以我可以写一个公共的Adapter(其继承于BaseAdapter),把相同的代码全部写在了这个Adapter上,变化的用抽象方法来表示,让子类去实现。

  但我后来发现使用这个图片缓存机制的地方除了ListView,GridView,GalleryView这些控件外,还会用在ViewSwitcher上,而使用这个控件是不需要BaseAdapter的,这时我有两种选择,一是:复制这些相同代码,另外单独再写一个类,二是:继续使用之前的公共Adapter,只是我不把它真正的BaseAdapter来用就行了。但我觉得这两种方法都不好,后来我想到的解决判法是:不用继承来重用代码,用组合加Java回调技术来重用代码。

  这时我就不把相同的代码写在抽象类里了,而是直接写在一个类里面,原来在抽象类里的抽象方法,我定义了一个接口,这个接口由使用这个公共类的类去实现,在公共类里,我只使用这个接口对象,这样同样也实现了为离相同的代码,变化的部分由使用者去实现,这样我就可以摆脱Java只能继承一个父类的问题,从而把使用ViewSwitcher和Listview,GalleryView,GridView的图片缓存机制的代码写在一块了。

  总结:Java回调方法和继承抽象类是实现模板方法模式的两种不同的实现。但我在解决这个问题的时候,并不知道自己就是使用模板方法模式。其实设计模式并没有那么高深和遥远,其实我们天天都在使用。看设计模式要结合自己的实际工作,从中进行总结和思考,只有这样才能真正的理解和掌握设计模式,才能真正的活用设计模式中的思想。

 

1
1
分享到:
评论

相关推荐

    瞬间·顿悟作文.doc

    【瞬间·顿悟】这篇作文,虽然以文学创作的形式呈现,但其中蕴含的深刻道理却与IT行业中的某些价值观有着共鸣。首先,"瞬间·顿悟"这一主题,揭示了生活中那些突然的领悟和理解,这与编程或解决问题时的"灵光一闪...

    顿悟编程(转)

    该文档讲述了作者学习编程以来的所有心得体会,编程世界里数据和代码的关系

    GoF+23种设计模式解析附C++实现源码(2nd+Edition).pdf

    但是,通过不断实践和深入研究,最终会达到“顿悟”的阶段,从而更加熟练地运用这些模式来解决实际问题。 #### 1. 创建型模式 - **1.1 Factory模式**:该模式提供了一个创建对象的接口,但允许子类决定实例化哪一...

    C++设计模式精解

    6. 作者经验分享:作者通过自己学习和应用设计模式的经历,分享了理解设计模式的过程,从最初的迷茫到顿悟,再到实现和教学的体验,强调了学习设计模式的必要性和对个人技能提升的价值。 7. 深入理解与实践:文档中...

    设计模式精解

    通过阅读和实现GoF的23种模式,作者感受到从苦闷到顿悟的过程,最终领悟到面向对象设计的真谛。这个过程是痛苦而漫长的,但也是必不可少的。 在实际软件开发过程中,设计模式的学习与应用并非一蹴而就,它需要时间...

    设计模式精解- GoF 23种设计模式解析附C++实现源码

    阅读设计模式的圣经一一GoF的《设计模式:可复用面向对象软件的基础》时的枯燥、苦闷、茫无头绪,到有一天突然有一种顿悟;自己去实现GoF的23中模式时候的知其然不知其所以然,并目有一天在自己设计的系统种由于设计的...

    GoF 23种设计模式解析(附C++实现源码)

    然而学习设计模式的过程却是痛苦的,从 阅读设计模式的圣经——GoF 的《设计模式:可复用面向对象软件的基础》时的枯燥、苦闷、 茫无头绪,到有一天突然有一种顿悟;自己去实现 GoF 的 23 中模式时候的知其然不知其所 ...

    应急管理(提示顿悟).pdf

    应急管理(提示顿悟).pdf

    股票交易模式训练软件V0.1安装包.exe

    游资大佬每一个讲自己的心路历程,没有一个不是爆仓,不痛苦折磨一段黑暗时期,然后顿悟出一些方法,甚至有些人学习哲学,佛法,心理学让自己内心平静下来,做到知行合一,减少自己内心的痛苦…… 交易模式没有...

    问题解决型信息技术课程教学模式研究——以“人工智能及其应用”为例.pdf

    标题中提到的“问题解决型信息技术课程教学模式研究”,其核心概念围绕“人工智能及其应用”展开,标志着教学模式的研究不再局限于传统教学法,而是寻求通过问题解决为引导的方式,将人工智能作为工具和内容,让学生...

    Stable Diffusion六脉神剑,小白的福音,看了立刻顿悟入门.pdf

    - **LORA**:轻量级的微调方法,可以快速适应新数据集。 - **DreamBooth**:用于个性化训练的插件,帮助用户创建定制化的模组。 ##### (六)提示词 提示词是用户输入的文字描述,它是Stable Diffusion生成图像的...

    设计模式C++版

    设计模式之于面向对象系统的设计和开发的作用就有如...然而学习设计模式的过程却是痛苦的,从阅读设计模式的圣经——GoF的《设计模式:可复用面向对象软件的基础》时的枯燥、苦闷、茫无头绪,到有一天突然有一种顿悟;

    可视化与创新思维生活启示ppt模板.ppt

    这份名为"可视化与创新思维生活启示ppt模板.ppt"的文档,旨在引导读者理解和运用这两种思维方式,打破传统观念的束缚,激发潜在的创新潜力。 首先,我们要理解创新思维的含义。创新不仅仅是突发奇想,而是一种运用...

    高中数学解题八个思维模式和十个思维策略分析.doc

    3. **直觉思维**:直觉是快速分析问题并找到解决方向的思维形式,而灵感(顿悟)则是直觉的深入表现,是潜意识层面的快速综合思考。直觉和灵感在解决复杂问题时起到关键作用。 接下来是十大思维策略: 1. **问题...

    创新思维模式讲义.pptx

    激发创新潜能的方式包括良性暗示,保持积极的心态,幽默的氛围可以促进思维的活跃,而梦境中的顿悟有时也能带来灵感。例如,通过自我激励的话语,如“太阳在为我喝彩,队友在为我加油,我一定能跑第一!”来提升自信...

    高中数学解题八个思维模式和十个思维策略.doc

    广阔性要求学生能够从多角度考虑问题,深刻性要求学生能够深入理解问题,灵活性要求学生能够从不同角度看问题,敏捷性则要求学生能迅速找到解题的切入点。独创性体现在学生能够提出新颖的解题方法,而批判性则体现在...

    创新思维模式.pptx

    这可以通过各种方法实现,如良性暗示以保持积极态度,创造幽默氛围以促进思维活跃,甚至利用梦境带来的顿悟来激发创新灵感。这些方法有助于释放个人内心的创新动力,使人们在日常生活和工作中能够不断地挑战现状,...

Global site tag (gtag.js) - Google Analytics