设计模式是面向对象编程的热门话题之一,越来越多的开发人员认识到设计模式的重要性。采用各种语言实现设计模式的文章也越来越多,但是很多开发人员发现很
难将设计模式与实际开发中需要解决的具体问题相联系。因为使用设计模式的难点往往不在于模式的实现,而在于很难确定哪种模式可以在现实的应用场景中采用,
从而导致了在现实的项目中,面对客户的压力,我们总是采用最直截了当的方法解决问题,来不及多考虑这些方法的优劣,即使明知将带来更大的麻烦也必须如此。
有些时候因为选择了不恰当的设计模式,使原本简单的问题变得复杂化。
总是有些优秀的设计人员可以在同样短的时间内做出正确对待的判断,他们同样是依靠本能和直觉,只是这种本能是在日常编程开发中一点一滴积累起来的。如同一个剑客在危机时刻的一击,并不是一时的灵光乍现,而是平时刻苦修炼的结果。
俗
话说,紧靠背棋谱成不了围棋高手。只在概念上理解设计模式而不实现,同样成不了架构设计师。在软件设计时,要有意识地问自己使用还是不使用设计模式,不要
匆忙下结论。重视软件质量的改进,如果有可能,则在项目后期重构代码。同时注意学习同行的经验,很多开放源码项目是值得学习的。
(1)正确理解设计模式
模
式所关注的不仅是重复的解决方案,更主要的是关注重复出现的应用场景和与场景相关的各种作用力。很多使用设计模式失败的原因,并不是实现设计模式的方法有
问题,而是采用的设计模式不适合应用场景。这往往导致设计过度,使软件应得复杂,进而丧失对使用设计模式的信心。
(2)编程语言与设计模式的实现
尽
管设计模式本身并不要求一定用某种语言来实现,但脱离了具体的实现,就无法真正理解设计模式。GOF的《设计模式》是经典之作,但毕竟距现在已经十几年
了。这个期间开发平台已经进化了多代,很多新技术已经应用到编程中。有些技术可以简化设计模式的实现,有些技术已经采用了设计模式。因此,学习设计模式必
须针对所使用的编程语言和开发平台。一定要注意,不是将《设计模式》中的例子转换为C#或者其他语言就等于知道如何实现设计模式了,而是要关注设计模式的
精髓,并结合具体的语言特点完成其实现。就.NET而言,很多技术可以简化设计模式的实现,例如采用反射技术实现工厂和采用委托技术实现模板方法等。
(3)需求驱动
需求驱动不仅仅是功能性需求,还包括性能需求及运行时的需求,如软件的可维护性和可复用性等方面。
设计模式是针对软件设计的,而软件设计是针对需求的,一定不要为了使用模式而使用模式。在不合适的场合生搬硬套地使用模式反而会使设计应得复杂,使软件难以调试和维护。
(4)分析成功的模式应用项目
对现有的应用实例进行分析是学习模式的一个很好的途径,应当注意学习已有的项目不仅是学习设计模式如何实现,更重要的是注意在什么场合使用设计模式。
“置之死地而后生”可以说是一种解决方案,而不是模式,或者说仅仅给出了模式的实现,而没有交代使用的场合。项羽采用这个方案把秦军打败了,但马谡却丢了街亭。
(5)充分了解所使用的开发平台。
总的来说,设计模式是针对面向对象的软件设计的,因此在理论上适合任何面向对象的语言。但随着技术的发展和编程环境的改善,设计模式的实现方式会有很大的差别。在某些平台下,某些设计模式是自然实现的,某些模式已经被平台所实现,某些模式存在的上下文已经消失。
这
里的平台不仅指编程语言,还包括平台引入的技术。.NET平台引进了反射、委托,以及属性等新技术,这些技术的使用使设计模式的实现方式有了很大的改变。
例如,工厂方法通过采用反射技术,可以将其中的子类去掉。这实际上已经是一个.NET下的新模式,或者说是.NET的“方言”。
(6)在编程中领悟模式
软件开发是一项实践工作,最直接的方法就是编程。没有定式很熟却从来不下棋的围棋高手,也没有不会编程就成为架构设计师的先例。对设计模式的掌握是水到渠
成的事情,你可能是“顿悟”,也可能是“渐悟”,但前提是必须有相当的实践积累。当然,并不是不需要看书学习,但实践仍然是必须首先要重视的。
认
为编程如同写文章,提高需要有一个过程。在多多编程的同时,需要有一定的技巧。如果希望水平有较大提高,则需要对自己编写的代码不断重构。力求最优是个很
好的习惯,当然前提是项目进度允许。即使项目时间紧张,也需要进行适当的总结。隔一段时间检查一下以前的工作,会发现自己是否已经有了提高。
(7)避免设计过度
设
计模式解决的是设计不足的问题,但同时也要避免设计过度。一定要牢记简洁原则(Keep It Simple, Stupid,
KISS),要知道,设计模式是为了使设计简单,而不是更复杂。如果引入设计模式使设计变得复杂,只能说我们把简单的问题复杂化了,问题本身不需要设计模
式。
这里需要把握的是需求变化的程度,一定要区分需求的稳定篇和可变篇。一个软件必然有稳定的篇,这个篇就是核心业务逻辑。如果核心业务
逻辑发生变化,软件就没有存在的必要,这个篇的逻辑是我们需要固化的。对于可变的篇,需要判断可能发生变化的程度来确定设计策略和设计风险。要知道,设计
过度与设计不足同样对项目有害。
(8)合理看待设计模式的实现实例
现在,从各种途径可以发现各种设计模式的实现实例。需要说明的是,其中很多实例所说明的仅仅是设计模式的解决方案的实现,并没有分析模式使用的上下文。实
际上,这也是最困难的篇——从而导致实例中的设计模式使用从实践的角度看,往往是过度设计,也就是有小题大做的嫌疑。
分享到:
相关推荐
通过这本书,初学者不仅可以学习到设计模式的基本知识,还能培养出良好的设计思维,从而在实际开发中能够更加自如地运用设计模式,提升软件质量。无论是对于个人的职业发展,还是对于团队的协作效率,掌握设计模式都...
Java设计模式是软件工程中的一种最佳实践,它提供了一种在特定情况下解决设计问题的通用模板...通过阅读《Java设计模式及案例》这本书,读者可以期待掌握这些模式的精髓,从而在自己的项目中自如地运用,提升代码质量。
在实际开发中,我们需要结合设计模式和多线程设计模式,比如在并发环境下,使用单例模式配合双重检查锁定(DCL)来确保线程安全的单例创建;或者使用观察者模式来实现线程间的通信,使得对象的状态变化能及时通知到...
6. **深入理解设计模式的精髓**,并能自如地运用。 学习设计模式不应止于理论,更重要的是通过实践来深化理解。每个设计模式都有其特定的用途,随着经验的积累,开发者会逐渐发现越来越多的情景可以应用到这些模式...
通过学习“设计模式之创建型模式”资源包,初学者将掌握在软件开发中如何有效地使用工厂模式和单态模式。这不仅仅是对设计模式的学习,更是对软件设计思想的深刻理解。掌握这些模式,将帮助初学者编写出更加灵活和可...
而"工具"标签则可能意味着除了理论知识外,还会涉及一些辅助工具或库,如IDEA的插件,用于可视化设计模式在代码中的体现。 至于压缩包内的"新建 文本文档 (12).txt",虽然没有具体的文件内容,但可以推测这可能是...
- **4.1 在开发中体验设计模式**:这部分内容着重介绍了如何在实际开发过程中运用设计模式,包括具体应用场景的选择与实践。 - **4.2 深入理解State模式附C++实现源码**:通过具体的例子,深入探讨State模式的应用...
Java设计模式是面向对象编程领域中的重要概念,它是一套被广泛接受并应用于解决常见问题的解决方案模板。这些模式在实际开发中具有很高的重用性,可以帮助开发者编写出高效、可维护的代码。本资源“java设计模式(CHM...
同时,实践是检验真理的唯一标准,尝试在自己的项目中应用这些设计模式,你会发现它们能极大地提升代码质量。 总的来说,设计模式是软件工程的宝贵财富,它们是经验的结晶,能够帮助开发者编写出更加优雅、高效的...
### 信息化环境下英语语块教学模式在小学英语教学中的运用 #### 一、树立语块学习的意识 在信息化教学背景下,英语语块教学模式强调的是以“媒体+语块”为核心的教学理念。这一模式旨在改变传统的单词孤立记忆方式...
在机械设计课程中,教师可以设定与专业相关的任务,如设计一款机械设备或解决一个具体的技术问题,让学生在完成任务的过程中,自然而然地学习和运用机械设计原理、自动化技术和专业英语词汇。 双语教学则旨在同时...
在动手实践中,学习者通过修改代码、观察运行结果、调试错误,不仅可以提高代码编写能力,还能深化对C++语言结构、语法细节和程序逻辑的理解。 PPT演示文稿是配合实例源码学习的良好补充。它通常以结构化的形式呈现...
Adapter模式是一种设计模式,它允许不兼容的类之间进行通信,通过创建一个适配器类作为中介,将原有接口转换成目标接口。...通过实践和测试,我们可以更好地理解和掌握这一模式,从而在未来的项目中更加自如地运用。
设计模式是软件工程中经过实践证明的、在特定场景下解决常见问题的模板。它们是经验的总结,可以提高代码的可读性、可维护性和复用性。设计模式分为三大类:创建型模式、结构型模式和行为型模式。 1. **创建型模式*...
在学习方法上,课程鼓励教师遵循重点突出、难点分散的原则,采用实例讲解、示范演示、讲练结合、网络混合式学习等多样化的教学方法,帮助教师深化理解,并在实践中解决实际问题。此外,教师还应利用信息化工具,如...
《Head First源代码》是Java设计...同时,这些实践案例也能够帮助你在实际项目中更自如地运用设计模式,解决复杂问题。所以,对于任何Java开发者来说,下载和研究《Head First源代码》都是一个非常有价值的学习步骤。
在本节WPF基础视频教程中,我们聚焦于“鼠标输入”这一主题,这在创建交互式用户界面时是至关重要的。WPF(Windows Presentation Foundation)是.NET...鼠标输入”,你将更深入地了解这些概念,并能在实践中自如运用。
教学模式通常包括在真实或模拟的情境中引入对话,让学生在实践中学习和运用新语言。 综上所述,小学英语单元整体教学模式是一个系统性、连贯性的教学策略,旨在全面提升学生的英语能力,促进教师的专业成长,并优化...