软件测试开发技术Java设计模式之综述篇

发表于:2009-09-04来源:作者:点击数: 标签:软件测试javaJAVAJava开发
软件 测试 开发技术 Java设计模式之综述篇 Java开发 关键字:Java 设计模式 自从J2EE出现以来,就大大简化了在Java下的企业级开发。但是随着J2EE越来越普遍地被应用到各个领域中,开发者们渐渐意识到需要一种方法来标准化应用程序的开发过程,他们采用的方法
软件测试开发技术Java设计模式之综述篇  Java开发

关键字:Java 设计模式

  自从J2EE出现以来,就大大简化了在Java下的企业级开发。但是随着J2EE越来越普遍地被应用到各个领域中,开发者们渐渐意识到需要一种方法来标准化应用程序的开发过程,他们采用的方法是标准化应用程序的结构层。在结构层通常封装了一些独立于业务逻辑的复杂技术,以便在业务逻辑和底层的架构之间建立起弱连接。在个专题中将会介绍一些设计模式,通过利用这些设计模式,开发人员可以达到标准化和简化应用程序开发过程的目的。

  应用程序结构和J2EE

  J2EE是一个很成功的技术,它为一些基本的任务提供了一致的标准,例如数据库连接、分布式应用程序等。但是使用J2EE并不能保证开发人员开发出成功的应用程序。有些人认为J2EE本身就是一种框架技术,但是这种认识是不正确的,我们应该意识到J2EE并没有提供一个能够帮助开发人员开发出高质量应用程序的框架,因此很多有经验的开发人员通过利用设计模式来弥补这一缺项。

  设计模式

  在开发人员的圈子中,大家通过相互交流在开发过程中所遇到的问题以及解决方法来丰富整个圈子的经验。而设计模式就是在这样的情况下产生的。一个设计模式必然是针对某个特定的问题的,这个问题的解决方案以及这样解决问题产生的后果。在解决利用J2EE进行程序开发中出现的问题的过程中,人们把设计模式分为两类,一种是通用开发模式,一种是为了解决特定的J2EE问题的模式。下面让我们来看一看每一种类型的开发模式都包含了哪些内容。

  J2EE设计模式

  J2EE设计模式在过去几年中随着Java开发人员经验的不断成长而发展。这些设计模式是针对使用各种J2EE技术时可能出现的问题提出的,它们能够帮助开发人员构造出应用程序框架的要求。例如,Front Controller(前端控件)模式将servlet代码的开发转化为在图形用户界面下的开发。但是需要记住J2EE设计模型解决了那些在J2EE项目中最可能出现的问题。如果你在J2EE遇到的问题很特殊,很有可能没有相应的设计模型来解决它。

  软件开发设计模式

  软件开发设计模式又被分为两种,一种是通用的面向对象设计模式。例如工厂(Factory)模式是一种面向对象的设计模式,它将对象的创建封装起来,使对象能够重用,这样就可以减少程序占用的系统资源。而另一种是基于Java的设计模式,这些设计模式要么是和Java的语言特性结合得很紧,要么是面向对象技术在Java中的深化。不要以为软件设计模式相对独立于J2EE就认为它们不重要,通常它们比J2EE设计模式更重要。这是因为:

  1)J2EE设计模式是近几年才出现的,并且在不断变化,而软件开发设计模式经过了长时间的考验,比前者更加成熟和完善;

  2)有些J2EE设计模式是建立在某些软件开发设计模式之上的;

  3)软件开发模式为J2EE设计模式提供了坚实的基础。它的应用将影响到整个结构的稳定性和可扩充性。

  在实际应用中,设计模式并不是一段具体的代码。设计模式通常是在设计说明书中描述。将设计模式应用到系统中的真正挑战在于如何在系统中应用模式中的思想。这些思想必须被应用到恰当的环境中。

  根据设计模式的所解决的问题,又可以分为以下几个类型:

  · 创建类型:创建类型的模式都是用于创建类的实例。但是和通过new来创建实例不同,这些模式提供了更加灵活的方式,是程序能够根据特定的情况创建特定的类。

  · 结构类型:结构类型的模式帮助开发人员将简单对象组合在一起以后的更加复杂的结构。

  · 行为类型:行为类型的模式帮助开发人员控制类之间的通讯。

  创建类型的模式

  所有创建类型的模式都和如何有效地创建类的实例相关。在Java中,如果开发人员要生成一个类的实例,最简单的方法是使用new关键字:

  MyFoo = new Foo(); // 生成一个Foo的实例

  这种方法只能够在程序中生成固定的类。但是在很多情况下,程序需要根据不同的情况生成不同的类的实例,这就需要将实例的生成过程抽象到一个特殊的创建类中,由该类在运行时决定生成哪种类的实例。这样使得程序有更好的灵活性和通用性。

  创建类型的模式包括:

  · 工厂模式(Factory Pattern):根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,而这一组类有一个公共的抽象父类。

  

原文转自:http://www.ltesting.net