`
VerRan
  • 浏览: 459135 次
  • 性别: Icon_minigender_1
  • 来自: 陕西.西安
社区版块
存档分类
最新评论
阅读更多

谈谈“模式思维”

作者:banq 发表时间:2006年05月15日 17:46 回复此消息回复

原贴网址: http://www.jdon.com/jivejdon/thread/26737.html  
 现在各种框架越来越多;模式使用机会性似乎减少了,那么是不是意味着我们就不必掌握模式了呢?其实,学习模式实际为了培养模式思维,模式思维有助于了解和使用框架。

例如如何我们在使用表现层哪个框架,都是MVC模式实现,那么进行编程步骤时,我们脑海里就浮现一个步骤V/C/M以及C和V的转发关系,进而感觉struts-config.xml配置就不是多余或复杂,而是必须的。

现在有人觉得好像Java世界框架特别多,异常复杂,其实这可能是他从封闭世界走向开放自由世界产生的错觉,当你具备模式思维时,实际你就具备了挑选各种各样框架的能力,打个比喻:以选择轿车为例子,过去,只有一种“红旗”轿车供选择,你就只有接受这个轿车;但是现在轿车多了,选择多了,你就必须了解轿车的通用概念,进而你就可以在各种轿车之间选择和衡量,了解轿车的通用概念这个过程就如同我们学习模式,具备通用编程的模式思维,有了模式思维,就会发现有这么多选择产品,不再嫌复杂,而是变得兴奋了;所以,没有复杂的东西,只有是否原意学习的头脑;PC电脑对于一些人很复杂,可是对于我们会复杂吗?不会,因为我们已经掌握通用电脑的模型、模式。

所以,有人觉得Java软件很多配置复杂,甚至产生配置恐惧症,那是因为他没有模式思维,在模式思维指导下的编程工作,就象在写一篇生动的小说一样,你脑海展现的生动模式实现步骤,而无论代码或配置都是实现你模式思维的文字工具,模式思维考虑到哪里,就想起什么配置,配置对具备模式思维的你来说是很自然的表达。

在模式思维下的Java编程,编码阶段code completion可能花费2/3时间,但是调试测试时间只需要1/3甚至不到,大多数情况下是一步到位的调试成功;这比以前1/3编程时间,2/3调试时间要高效多,关键是:你无论花费多少时间在调试上,实际上是在做一个修修补补的工作,是在做维修工,头疼医头,永远是机修工,无法成为设计师。

下面从模式思维角度谈谈几个认识误区,仅仅参考讨论:

游戏软件比企业软件复杂?
为什么说企业软件时复杂的?因为企业软件是为应付需求而变,与游戏软件等软件相比,虽然一个游戏软件在代码数量级别上比企业软件复杂,但是游戏软件不必考虑跟随游戏用户需求变化,是游戏用户服务游戏设计规则;但是企业软件和其用户则相反,企业软件必须服从用户的变化,打个不是很确切的比喻:企业软件则类似市场经济中的市场人员,需要“看客户脸色”行事。而游戏软件则相反,类似以前朝南坐的政府人员;

因此,企业软件在动态概念上是随时间变化而变化,是由生命的,因为计划赶不上变化,所以企业软件制作时总是使用模式为将来变化预留余地,这种面向未来变化考虑方式无疑是最复杂的思维,就象股票变化将这种未来变化的残酷推向极致,我们都想计划未来,但是总是计划不了未来,这就是企业软件的复杂所在。

Class.forName神秘吗?
有人觉得Class.forName很神秘,神秘不在于本身,就是打开其编码研究到二进制也不能达到目的,它的神秘之处是因为应用在一个恰当之处,就象一块普通布没什么,但是如果从后面变出花了,你觉得这块布神奇了,Class.forName神奇之处在于其隐藏了对象创建,也一种是工厂模式实现。

同样,对于Collection,本来就是那几个种类List和Map,但是发现使用起来神奇得很,有人甚至研究过Collection的二进制,这和研究魔术师中一块普通布没有什么区别。Collection用于容器,作为对象集合;以及和单例结合实现缓存等,可以实现多种模式。

仅会算法就做企业软件吗?
在实践中,通常表示一个树形关系通过编码实现,例如1122334455表示是代号为11类别下代号为22类别下的代号为33类别下的....然后,在软件各处通过分析这个类别编码获得树形关系,这种将将具体数据和业务耦合在一起做法是受到抨击的。

那么如果我们要对树形关系的数据进行访问如何实现呢?首先我们将树形关系的访问分为两个部分:树形关系+功能实现。我们已经知晓树形结构的遍历,但是仅仅知道树形结构遍历还是不够的,我们还需要模式来解决树形关系访问这个通用问题,使用Composite模式可以方便客户端对树形结构访问,使得客户端不至于因为树形结构变化而变化不定;而访问者模式则不会总可能新增的新访问功能,导致树形结构中对象代码变化不定。
这两种模式协同发力,可以综合解决树形结构中对象群的访问。
http://www.jdon.com/jive/thread.jsp?forum=91&thread=23857

GoF模式打开的新境界
没有知晓GoF模式之前,我们总是以为编码就是写一些代码,然后运行,复杂吗?如果我们来分析一下GoF模式三个类型,你会发现平时熟视无睹的代码中隐藏如此多考虑方面。

GOF模式三种类型:结构型模式、创建型模式和行为型模式其实函括了OO编码的三个方面:静态类关系、类创建成为运行时对象实例;运行时的对象运行行为,也就是说,我们在编码阶段不但考虑现阶段各个类之间静态解耦关系,而且还要考虑这些代码激活后,运行时的情况。

而以往过程化编程中,编码状况=运行状况,如何先后编码,这些编码运行时就按照这些先后编码顺序执行,两者是统一的,不可能出现运行时可能和编码时预想不一样,更何况需要我们还要在进行类编码时,考虑这些类运行时是如何实现的,有如何对这些类运行时的关系进行解耦和分离呢?所以,我们“天生”就无法理解设计模式,因为我们从来就认为软件就是实现功能,哪里还会考虑到实现同样功能会涉及各种考量了呢?

如果说设计模式是程序员的圣经,那么不掌握设计模式可能就是异教徒,从此教徒和异教徒两者之间就缺乏沟通对话平台,就象鸡对鸭讲话了。

非模式思维的惩罚
面向对象软件体系是和面向过程体系格格不入的,面向对象的各种技术如单元测试 性能缓存等等都是OO体系,如果我们没有具备模式思维来编程,由此而诞生的软件架构必然失败,失败在哪里?通过性能惩罚你。最近碰到一个台湾的钢铁架构,它虽然包含一个简单的MVC框架,但是其Controller实际又是Service,该框架配置将下面几个元素耦合在一起:页面流程;控制类;Dao与VO,这实际是将表现层和持久层直接结合一起,这样的框架迫使程序员没有空间做中间领域模型层和服务层,进而整个体系变成一个两层耦合结构,这和传统的C/S没有区别,在Java中使用传统概念编程:如面向过程、面向数据表以及两层耦合导致结果是性能缓慢,很多大型项目就是这样最后是毁在性能上,服务器需要经常启动,一旦并发用户就很慢,服务器经常死机。

有人可能奇怪:非模式思维属于设计问题,怎么会对性能影响,这是将设计和性能对立起来,性能也是一种设计,池模式以及缓存也是属于模式啊,但是缓存的高效率应用是建立良好的对象设计基础上,或者说是良好的领域建模上,否则就是使用缓存,也会导致粒度或动态机制不准确,无法发挥缓存效率,甚至无法使用缓存。
分享到:
评论

相关推荐

    互联网思维独孤九剑

    资源名称:互联网思维独孤九剑内容简介:本书是国内第一部系统阐述互联网思维的著作,用9大互联网思维:用户思维、简约思维、极致思维、迭代思维、流量思维、社会化思维、大数据思维、平台思维、跨界思维,以专业的...

    C++设计模式.pdf

    ### C++设计模式精解 #### 一、引言 ...掌握这些模式不仅能够提高代码的质量和可维护性,还能够提升开发者的编程技巧和思维水平。无论是对于初学者还是有经验的开发人员而言,这份文档都是一个宝贵的资源。

    JavaWeb设计模式之道

    资源名称:Java Web设计模式之道内容简介:《Java Web设计模式之道》全面讲解了JavaWeb设计模式,集理论与实战于一体,结合创新与发散思维,为读者提供思维上、方法上的启发。《Java Web设计模式之道》结合JavaWeb...

    二十三种设计模式【PDF版】

    主要是介绍各种格式流行的软件设计模式,对于程序员的进一步提升起推进作用,有时间可以随便翻翻~~ 23种设计模式汇集 如果你还不了解设计模式是什么的话? 那就先看设计模式引言 ! 学习 GoF 设计模式的重要性 ...

    雷军演讲全文:用互联网思维改造传统产业(完整版)实用资料.doc

    5. 互联网思维可以帮助企业创新、创业,创造新的业务模式。 详细解释: 互联网思维是一种全新的思想,它需要企业拥抱变化,拥抱未来的发展。互联网思维的核心是七个字:专注、极致、口碑、快。这七个字是互联网...

    “互联网 ”背景下生鲜农产品流通电商模式与提质增效研究.pdf

    借助互联网思维,重新构建农产品市场机制,打破生产与消费分割的现状,流畅传导产需信息,为生鲜农产品电商模式的提质增效提供市场环境支撑。 通过对“互联网+”背景下生鲜农产品流通电商模式的研究,我们可以认识...

    深度学习思维下中学足球教学策略.pdf

    在中学足球教学中,传统教学模式往往注重单个技术动作的学习与练习,这导致学生在实际比赛中往往无法有效地将技术动作结合起来运用,从而出现了技术好、实战比赛能力弱的现象。为了解决这一问题,本文提出了基于深度...

    从互联网思维看互联网公益

    4. **社会化思维**:通过众包、众传、众智等方式调动社会资源,实现资源的最大化利用。 5. **跨界思维**:打破行业界限,通过整合不同领域的资源和技术,创造出新的商业模式和产品形态。 #### 二、互联网+公益 ...

    计算机网络思维导图

    ### 计算机网络思维导图知识点详述 #### 一、计算机网络原理 ##### 1. 计算机网络体系结构 - **定义**:计算机网络体系结构是指网络各层及其协议的集合,它是对计算机网络各层功能及其相互关系的精确定义。 - **...

    “互联网 ”背景下,云打印服务模式构建.pdf

    因此,传统的打印服务行业亟需借助互联网思维进行革新,以适应新的市场环境。 互联网云打印服务模式的构建,是通过线上发布打印需求,并通过云打印终端完成打印工作的服务模式。它利用了现代电子设备的便捷性,使...

    PYTHON 思维导图

    - 参数传递:Python采用“传对象引用”机制,有位置参数、关键字参数以及默认参数。 - 作用域:全局变量与局部变量,`global`关键字用于声明全局变量。 4. **模块与包** - 模块:Python代码组织的基本单元,可以...

    飞得更高:孙正义传.pdf

    作者井上笃夫通过对孙正义深入细致的采访,揭示了这位软银集团创始人兼CEO背后的独特思维模式与成功秘诀。 ### 孙正义的另类思维 孙正义的成功,很大程度上归功于他与众不同的思考方式。他敢于冒险,相信在看似不...

    医疗大数据驱动下的科研转化模式探索.pdf

    其次,大数据思维模式的建立是推动科研模式创新的关键。文章提出了“大视野、多维度、言之有据”的十字思维模式,这要求科研人员在思考问题时能够拓宽视野,考虑更多的维度,并且在所有行动和表述中都要做到有据可依...

    基于计算思维的《C语言程序设计》课程教学研究.pdf

    计算思维是一种解决问题、设计系统和理解人类行为的基本技能,它涉及一系列思维活动,包括问题分解、模式识别、抽象思维以及算法设计等。在程序设计教育中,计算思维的培养尤其重要,因为它能帮助学生建立起逻辑和...

    在信息时代如何用创新的思维做电视编辑.pdf

    传统的电视编辑被视为信息的把关者,负责筛选和传播新闻,但在网络技术与现代信息技术的推动下,他们需要适应新环境,转变为既是传声筒又是信息把关者的角色。在信息爆炸的背景下,电视编辑不再仅仅是信息的传播者,...

    基于ZigBee技术的无线数传模块设计

    1. **低功耗**:ZigBee采用低发射功率(约1mW),并有低功耗模式,使得设备极其节能。 2. **低成本**:初期模块成本约6美元,随后可降至1.5至2.5美元,协议简单,开发成本较低。 3. **短时延**:快速的唤醒和信道接...

    新的传播学理论框架研究——兼评拉斯韦尔的5W传播模式的功绩与局限分享.pdf

    然而,即便进入21世纪,许多传播学著作仍受限于这一模式,反映出对拉斯韦尔模式的保守态度以及打破思维定势的困难。 从传播学说史的角度审视5W传播模式,可以将其定位在传播学发展的特定阶段。传播学的发展经历了从...

    徐传运 JAVA高级程序设计课后习题答案

    通过学习并实践这些课后习题,读者不仅可以巩固基础,还能深入了解Java的高级特性,培养良好的编程习惯和思维模式。同时,解题后的代码运行和调试也是提升编程实战经验的重要环节。因此,这份课后习题答案压缩包对于...

    马云传-永不放弃.rar

    他深刻理解互联网的力量,认为它是连接世界、推动商业发展的新工具,这一前瞻性思维使得阿里巴巴在电商领域独树一帜。 《马云传——永不放弃》中详细讲述了马云如何面对挑战,如何在危机中寻找机遇。例如,在2003年...

    传太医-打造国内最大的O2O医疗服务品牌.zip

    10. **大学生创业**:"传太医"作为大学生创业项目,还需要关注团队建设、创新能力、市场敏锐度以及资金筹措等方面,充分利用年轻人的活力和创新思维,应对创业中的各种挑战。 通过以上分析,我们可以看出"传太医...

Global site tag (gtag.js) - Google Analytics