现在各种框架越来越多;模式使用机会性似乎减少了,那么是不是意味着我们就不必掌握模式了呢?其实,学习模式实际为了培养模式思维,模式思维有助于了解和使用框架。
例如如何我们在使用表现层哪个框架,都是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模式可以方便客户端对树形结构访问,使得客户端不至于因为树形结构变化而变化不定;而访问者模式则不会总可能新增的新访问功能,导致树形结构中对象代码变化不定。
这两种模式协同发力,可以综合解决树形结构中对象群的访问。
GoF模式打开的新境界
没有知晓GoF模式之前,我们总是以为编码就是写一些代码,然后运行,复杂吗?如果我们来分析一下GoF模式三个类型,你会发现平时熟视无睹的代码中隐藏如此多考虑方面。
GOF模式三种类型:结构型模式、创建型模式和行为型模式其实函括了OO编码的三个方面:静态类关系、类创建成为运行时对象实例;运行时的对象运行行为,也就是说,我们在编码阶段不但考虑现阶段各个类之间静态解耦关系,而且还要考虑这些代码激活后,运行时的情况。
而以往过程化编程中,编码状况=运行状况,如何先后编码,这些编码运行时就按照这些先后编码顺序执行,两者是统一的,不可能出现运行时可能和编码时预想不一样,更何况需要我们还要在进行类编码时,考虑这些类运行时是如何实现的,有如何对这些类运行时的关系进行解耦和分离呢?所以,我们“天生”就无法理解设计模式,因为我们从来就认为软件就是实现功能,哪里还会考虑到实现同样功能会涉及各种考量了呢?
如果说设计模式是程序员的圣经,那么不掌握设计模式可能就是异教徒,从此教徒和异教徒两者之间就缺乏沟通对话平台,就象鸡对鸭讲话了。
非模式思维的惩罚
面向对象软件体系是和面向过程体系格格不入的,面向对象的各种技术如单元测试 性能缓存等等都是OO体系,如果我们没有具备模式思维来编程,由此而诞生的软件架构必然失败,失败在哪里?通过性能惩罚你。最近碰到一个台湾的钢铁架构,它虽然包含一个简单的MVC框架,但是其Controller实际又是Service,该框架配置将下面几个元素耦合在一起:页面流程;控制类;Dao与VO,这实际是将表现层和持久层直接结合一起,这样的框架迫使程序员没有空间做中间领域模型层和服务层,进而整个体系变成一个两层耦合结构,这和传统的C/S没有区别,在Java中使用传统概念编程:如面向过程、面向数据表以及两层耦合导致结果是性能缓慢,很多大型项目就是这样最后是毁在性能上,服务器需要经常启动,一旦并发用户就很慢,服务器经常死机。
有人可能奇怪:非模式思维属于设计问题,怎么会对性能影响,这是将设计和性能对立起来,性能也是一种设计,池模式以及缓存也是属于模式啊,但是缓存的高效率应用是建立良好的对象设计基础上,或者说是良好的领域建模上,否则就是使用缓存,也会导致粒度或动态机制不准确,无法发挥缓存效率,甚至无法使用缓存。
分享到:
相关推荐
首先,我们来谈谈设计模式的基本理念。设计模式并不直接是代码,而是一种描述在特定情况下如何解决常见问题的经验总结。它们是经过验证的、在不同环境中都可以高效使用的解决方案模板,有助于提高代码的可读性、可...
首先,我们来谈谈设计模式。设计模式是软件工程中的一种最佳实践,是解决常见问题的经验总结。在这个游戏中,我们可以看到多种设计模式的应用,如单例模式(Singleton)用于确保游戏全局只有一个实例,工厂模式...
系统架构+ORM+设计模式 系统架构+ORM+设计模式
《深入浅出Java设计模式》是一本专注于Java编程领域中的设计模式专著,旨在帮助开发者深化对设计模式的理解,提高代码质量和可维护性。设计模式是软件开发中经过时间检验的解决方案,它们是解决常见问题的最佳实践。...
首先,我们来谈谈设计模式的基本概念。设计模式是在特定上下文中解决软件设计问题的模板,它描述了在特定情况下如何进行设计,但并不直接提供代码实现。设计模式分为三类:创建型模式(如单例模式、工厂模式、建造者...
设计模式详解 设计模式是软件开发中相同问题的解决方案的总结,它们是可重复利用的解决方案。在某种程度上,设计模式已经代表了一些特定情况的最佳实践,同时也起到了软件工程师之间沟通的“行话”的作用。理解和...
在软件设计领域,设计模式是一种经过验证的、通用的解决方案,用于解决常见编程问题。"工厂模式"是其中一种常用的设计模式,它提供了一种创建对象的最佳方式。在这个主题下,我们将深入探讨三种主要的工厂模式:简单...
设计模式是软件工程中的一种重要思想,它是针对在软件设计过程中遇到的常见问题,经过长期实践提炼出的可复用的解决方案。设计模式是经验的结晶,代表着在特定上下文中解决问题的最佳实践,有助于提高代码的可读性、...
设计模式是软件工程中的一种重要思想,它是在特定情境下为了解决常见问题而提出的一套最佳实践。这个“设计模式资料合集”显然包含了关于设计模式和ODBC API编程的相关资源,对于学习和理解这两种技术有着极大的帮助...
在软件开发领域,设计模式是一种经过时间和实践验证的解决方案,用于解决常见的编程问题。C#设计模式详解,正如标题所示,是深入理解如何利用这些模式来提升软件开发效率和质量的关键。本文将针对C#环境下的23种经典...
首先,我们来谈谈C#中的单例设计模式。单例模式确保一个类只有一个实例,并提供全局访问点。在多线程环境下,单例模式能保证线程安全,避免多个实例的产生。C#中实现单例模式通常有懒汉式和饿汉式两种方式,前者在第...
首先,让我们谈谈“五大原则”,这是理解设计模式的基础。这五大原则是单一职责原则(SRP)、开放封闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)和依赖倒置原则(DIP)。单一职责原则强调一个类或模块...
《C++范型编程与设计模式应用》是一本旨在帮助开发者从初级阶段过渡到高级阶段的书籍,专注于C++中的泛型编程和设计模式。这本书深入探讨了如何利用C++的泛型特性来编写可复用、高效且灵活的代码,并结合设计模式,...
在IT行业中,设计模式是软件开发中的重要概念,它代表了在特定场景下解决常见问题的最佳实践。在前端领域,尤其是对于JavaScript、TypeScript以及Vue等技术栈的开发者来说,理解并能灵活运用设计模式是面试中不可或...
《超越设计模式:软件开发的艺术》 设计模式作为软件开发中的重要工具,旨在提升代码的复用性和可维护性,但过度依赖特定模式可能导致思维固化。实际上,设计模式的本质是抽象出可复用的设计原则,而非固定不变的...
在IT领域,设计模式是软件开发中的重要概念,它们代表了在特定场景下解决常见问题的最佳实践。今天我们要深入探讨的是Builder设计模式,这是一种创建型设计模式,它提供了一种方法来分步骤构造复杂的对象,使得构建...
在软件设计领域,设计模式是一种经过时间和实践验证的解决方案,用于解决常见的编程问题。本文将深入探讨三种重要的设计模式:简单工厂模式、工厂方法模式和抽象工厂模式,这些模式都属于创建型设计模式,主要关注...
在软件开发领域,设计模式是经验丰富的开发者们总结出的解决常见问题的模板,它们提供了一种在特定情况下高效、可复用的解决方案。本文主要关注的是Java编程语言中的设计模式,结合“Java与模式-笔记二”的博客内容...
在Java编程领域,多线程和设计模式是两个至关重要的概念,它们对于构建高效、可扩展和健壮的软件系统至关重要。在这个“java多线程_设计模式_各种技术”主题中,我们可以深入探讨这两个核心知识点。 首先,让我们来...
MVC,即Model-View-Controller,是一种设计模式,旨在分离应用程序的数据层(Model)、用户界面层(View)和控制逻辑层(Controller)。在JavaScript环境中,这种模式被广泛应用,特别是在构建大型、动态的单页面...