`

设计模式在软件开发中的应用

阅读更多
首先了解设计模式的概念,及其基本的分类。

什么是设计模式呢? 一个设计模式提供一种提炼子系统或软件系统中的组件的,或者它们之间的关系的纲要设计。设计模式描述普遍存在的在相互通讯的组件中重复出现的结构,这种结构解决在一定的背景中的具有一般性的设计问题。

设计模式常常划分成不同的种类,常见的种类有:

创建型设计模式,如工厂方法(Factory Method)模式、抽象工厂(Abstract Factory)模式、原型(Prototype)模式、单例(Singleton)模式,建造(Builder)模式等

结构型设计模式,如合成(Composite)模式、装饰(Decorator)模式、代理(Proxy)模式、享元(Flyweight)模式、门面(Facade)模式、桥梁(Bridge)模式等

行为型模式,如模版方法(Template Method)模式、观察者(Observer)模式、迭代子(Iterator)模式、责任链(Chain of Responsibility)模式、备忘录(Memento)模式、命令(Command)模式、状态(State)模式、访问者(Visitor)模式等等。

以上是三种经典类型,实际上还有很多其他的类型,比如Fundamental型、Partition型,Relation型等等。

先通过几个简单例子的说明来介绍在设计模式实际的软件开发中的使用。

让我们来看几段常见但又不够优雅的代码,这些代码 “你”、“我”、“他”或许都曾写过,但是终有一天你也会与我一样,看着有想撞墙的感觉(如果你写了N久这样的代码,还没有这种感觉,八成你是对编程不再感兴趣了,你对其已经麻木):

1.过多的if…else判断

if (type == 1) {
//调用获取信息方法1
} else if (type == 2) {
//调用获取信息方法2
   …….
} else {
    //调用获取信息方法7
}

这是我们在编程或者看书中要遇到的一段代码,如果条件判断非常之长,并且其他有些地方也有根据类型来做不同处理的情况。这些代码对于后阶段的维护简直是一场噩梦。

2.多次载入资源(例如配置文件的读取),引起资源损耗

public static String getProperty(String propKey) throws Exception ...{

Properties prop = new Properties();

InputStream propConfFile = Util.class.getClassLoader()

.getResourceAsStream("configure.properties");

//载入propConfFile到prop中,从prop中获取propKey的值,并将其返回

}

该段代码是我以前在一个项目中写的一段代码,该段代码用于读取工程配置文件的属性,但该段代码是存在一些问题的,因为在每次获取属性时,它都重新载入资源,造成了资源的过多损耗。

在我编码的过程中,遇到的问题还有很多。不够优雅的代码、过于僵硬的设计,等等,下面我将通过如上两个例子讨论-----


1. 解决过多的if…else判断问题


   如果在一段代码中,不少地方需根据某类型或状态等做出不同的处理,那当类型或状态增加时,这些代码将会过于僵硬,扩展性差,只有在各个分布了if…else的再增加一个else if,可维护性可想而知。设计模式中有一种模式可以解决该问题,即状态模式。状态模式给我们带来的好处如下:

1) 状态模式需要对每一个对每一个系统可能取得的状态创立一个状态类(State)的子类,当系统的状态变化时,系统改变所选的子类。与一个特定的状态有关的行为都被包装在一个特定的对象里,而且当需要增加新的状态时,可以以子类的方式将它加到系统里,从而提高了易维护性和可扩展性;

2)由于每一个状态都被包装到了类里面,避免了使用过多的条件转移语句。

下面我们对该例进行演示性的改进。我们可以定义一个类型接口,该类相当于状态模式中的状态类。

public interface Type {

    public Object getInfo();

    public Object getResult();

}

类型1、类型2等可以实现该接口,代码略: 


2. 解决过度资源损耗问题


   在该例中,每次通过getProperty(…)方法获取某属性时,都会重新载入文件中的所有内容,造成资源的不必要损耗。该设计模式中,对于此种情况,可以通过单例(Singleton)模式来优化处理。

import //略

public class PropertiesUtil ...{

    private static Map propertiesMap = null;

    public static String getProperty(String propKey) throws Exception ...{
       if (propertiesMap == null) ...{
        //当propertiesMap为空时,载入文件,将其键值对放入propertiesMap中(略)
       }
       //在propertiesMap中获得propKey属性,并将值返回(略)
    }

}

可以考虑实现单例模式的地方还有很多,例如:

1)对于计算机的外部资源打印机的情况,因只有一个Printer Spooler,为避免两个打印作业同时输出到打印机中,可考虑用单例模式实现。

2)Window的回收站在整个系统中只有唯一的一个实例,而且回收站自行提供自己的实例,回收站也是单例模式的应用
        
总结:

在使用了设计模式后,明显的发现以下几点::

1) 可以比较好的分工(比如,使用接口类型模式)

2) 代码组织更有条理(b比如buiilder模式:像查询的结果,中间的产生过程是非常复杂的,如果不用builder模式,谁去改了,也许过段时间,他自己都忘记了)

但是:千万不能为了模式而模式。重要的是各种模式中的思想,当你理解了思想之后,在实际的开发中不用想着硬套,自己就会想到使用(就算你已经忘记它是什么模式)。


原文网址:http://blog.csdn.net/yinyuan1987/archive/2008/11/03/3209783.aspx
分享到:
评论

相关推荐

    论设计模式在软件开发中的应用

    设计模式在软件开发中的应用 设计模式是软件开发中一个非常重要的概念,它提供了一种提炼子系统或软件系统中的组件的纲要设计。设计模式描述普遍存在的在相互通讯的组件中重复出现的结构,这种结构解决在一定的背景...

    软件设计模式在嵌入式控制系统中的应用

    随着硬件能力的提升和应用需求的多样化,软件设计模式在嵌入式控制系统中的应用变得越来越重要,它可以提高软件的可复用性、可扩展性及可移植性。 首先,嵌入式系统的定义是围绕特定应用的计算机系统,该系统通常...

    设计模式——工厂模式在开发中的应用(简单计算器)

    这个是http://blog.csdn.net/dawanganban/article/details/9884681博客中java设计模式的源代码。下载前请先看《设计模式——工厂模式在开发中的应用》一文。

    人人都懂设计模式 人人都懂设计模式

    在“经验篇”中,作者分享了自己在设计模式和软件开发方面的经验和看法,包括设计原则、项目重构等。 本书适合有一定编程基础的 IT 职场新人,对设计模式和编程思想感兴趣的人群。通过阅读本书,读者可以更好地理解...

    软件开发方法与环境--设计模式(ppt)

    5. **在软件开发方法与环境中应用设计模式**: - 在敏捷开发和迭代开发中,设计模式可以帮助快速构建和重构系统,适应需求变化。 - 配合软件工程中的其他方法,如面向对象分析和设计(OOAD),设计模式提供了有效...

    软件开发设计模式

    "软件开发设计模式"这个主题深入探讨了如何在实际编程中应用这些模式,以提高代码质量并促进团队间的有效沟通。 设计模式分为三类:创建型、结构型和行为型。创建型模式关注对象的创建过程,如单例模式、工厂方法和...

    软件设计模式在Java程序设计课程教学中的应用研究.pdf

    在实际教学过程中,设计模式的应用应该结合具体的教学目标和学生的学习情况来灵活运用,通过具体的案例分析、小组讨论、代码实践等多种教学手段,让学生在实践中掌握和应用设计模式。同时,教师也应该引导学生对设计...

    JavaScript设计模式与开发实践.pdf

    在本书中,作者还分享了自己在设计模式方面的研究和实践经验,包括设计模式的原型、设计模式的分类、设计模式的应用等,并提供了一些常见的设计模式的示例代码,帮助读者更好地理解和掌握设计模式。 《JavaScript...

    C#设计模式详解 软件开发

    本文将针对C#环境下的23种经典设计模式进行详细介绍,并探讨它们在实际项目中的应用。 首先,我们来谈谈工厂模式。这是最基础的设计模式之一,主要用于创建对象。工厂模式提供了一种抽象的接口,允许我们避免直接...

    软件开发的二十三种设计模式

    在软件开发过程中,设计模式可以提升代码的可读性、可维护性和复用性,帮助开发者更高效地构建系统。这里我们将深入探讨标题中提到的“软件开发的二十三种设计模式”。 1. **单例模式**:确保一个类只有一个实例,...

    软件设计模式期末作业

    在软件开发领域,设计模式是经过时间和实践验证的解决方案模板,用于解决常见问题。本作业以“软件设计模式”为主题,特别关注了装饰模式、工厂模式和适配器模式的运用。这三种模式都是面向对象设计的核心部分,它们...

    设计模式实践-软件开发

    正如烹饪时需要遵循菜谱以确保食物的美味,设计模式则作为软件开发过程中的指南针,帮助开发者解决在软件设计过程中遇到的反复出现的问题。设计模式的应用不仅限于类和对象的结构层面,还包括对象间的交互行为,从而...

    java模式,设计模式,多种设计模式

    设计模式对于软件开发来说至关重要,尤其是在Java企业级应用程序的开发中。通过采用合适的设计模式,开发人员不仅可以提高代码的质量,还可以显著提升开发效率。本文介绍了几种常用的设计模式,包括J2EE设计模式和...

    GOF设计模式中英文+设计模式精解中英文

    设计模式是软件工程中的一种重要概念,用于解决在软件开发过程中常见的设计问题,提升代码的可复用性、可维护性和可扩展性。GOF(Gang of Four)设计模式,由Erich Gamma、Richard Helm、Ralph Johnson和John ...

    设计模式在具体业务场景运用

    在移动项目或其他企业应用中,合理运用设计模式可以有效地提升代码质量,降低维护成本,同时提高系统的可扩展性和灵活性。工厂模式只是众多设计模式中的一种,每个模式都有其适用的业务场景,理解并熟练运用这些模式...

    24种设计模式以及混合设计模式

    在本文中,我们将深入探讨24种设计模式,并结合混合设计模式的概念,以及它们在实际项目中的应用案例。 首先,设计模式分为三大类:创建型、结构型和行为型。创建型设计模式关注对象的创建过程,如单例模式...

    软件设计 模式PDF

    《软件设计模式》一书是软件工程领域的重要参考资料,它主要探讨了在软件开发过程中,如何有效地重用设计思想和解决方案,以提升代码质量、可维护性和可扩展性。本书共分为15个章节,涵盖了多种经典的设计模式,旨在...

    软件设计模式实验报告.pdf

    在软件开发中,设计模式的运用有助于提高代码的可读性、可维护性和可扩展性。UML(统一建模语言)是表达这些模式的图形工具,它可以帮助开发者更好地理解和交流设计思路。在实验报告中,每个模式的实现都伴随着UML图...

Global site tag (gtag.js) - Google Analytics