ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:1.88MB ,
资源ID:1306994      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-1306994.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(设计模式报告.docx)为本站会员(wj)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

设计模式报告.docx

1、课程设计说明书课程名称 设计模式课程设计 设计题目 设计模式在FileUpload组件中的应用班号 专业 软件工程 学生姓名 # 指导教师(签字) 目 录第一章 设计模式概述 1.1模式与设计模式 1.2设计模式的定义 1.3设计模式的基本要素 1.4设计模式的分类第二章 FileUpload组件简介2.1 FileUpload组件由来及使用2.2 FileUpload组件的工作原理2.3 FileUpload组件中的部分接口、类简介第三章 设计模式在FileUpload组件中的应用3.1 工厂方法模式在FileUpload组件中的应用3.2 策略模式在FileUpload组建中的应用3.3

2、迭代器模式在FileUpload组建中的应用3.4 FileUpload组件中的重要类图第四章 结束语4.1 收获与总结4.2 参考文献第一章 设计模式概述1.1模式与设计模式模式起源于建筑业而非软件业,模式(Pattern)之父 美国加利佛尼亚大学环境结构中心研究所所长Christopher Alexander博士。Alexander给出了关于模式的经典定义:每个模式都描述了我们环境中不断出现的问题,然后描述了解决这个问题解决方案的核心,通过这种方式,我们可以无数次的重用那些已有的解决方案,无需再重复相同的工作,也可以用一句话概括为:模式是在特定环境中解决问题的一种方案。最早将Alexand

3、er博士的模式思想引入软件工程方法学的是以四人组(Gang of Four,GoF)自称的四位著名软件工程学者,他们在1949归纳发表的23中在软件开发中使用频率较高的设计模式,旨在用模式来统一沟通面向对象方法学在分析、设计和实现间的鸿沟。GoF将模式的概念引入软件工程领域,标志着软件模式的诞生,软件模式是将模式的一般概念应用于软件开发领域,即软件开发的总体指导思想或参照样板软件模式并非仅限于设计模式,还包括架构模式、分析模式、和过程模式等。从1987年Kent Beck和Ward Cunningham借鉴Alexander的模式思想在程序开发中开始应用一些模式到目前设计模式在软件开发的广泛应

4、用,Sun公司的Java SE/Java EE平台和Microsoft公司的.net平台设计中就应用了大量的设计模式。再设计模式领域,下一的设计模式是指GoF的设计模式:可复用面向对象软件的基础一书中包含的23中经典设计模式,不过设计模式并不仅仅只有这23中,随着软件开发技术的发展,越来越多的模式不断诞生并得以广泛应用。1.2设计模式的定义 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码的可靠性。1.3设计模式的基本要素1.3.1模式名称(Pattern name) 模式

5、名称通过一两个词来描述模式的问题、解决方案和效果,以便更好地理解模式并方便开发人员之间的交流,绝大多数模式都是根据其功能或模式结构来命名的。 1.3.2问题(Problem) 问题描述了应该在何时使用模式,它包含了设计中存在的问题以及问题存在的原因。这些问题有些是一些特定的设计问题,如怎样使用对象封装状态或者使用对象表示算法等,也可能是系统中存在不灵活的类或对象结构,导致系统可维护性较差。1.3.3解决方案(Solution) 解决方案描述了设计模式的组成成分,以及这些组成成分之间的相互关系,各自的职责和协作方式。模式是一个通用的模板,它们可以应用于各种不同的场合,解决方案并不描述一个特定而具

6、体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。1.3.4效果(Consequences)效果描述了模式应用的效果以及在使用模式时应权衡的问题。效果主要包含模式的优缺点分析,我们应该知道,没有任何一个解决方案是百分之百完美的,在使用设计模式时需要进行合理的评价和选择。1.4设计模式的分类 根据设计模式的目的(模式是用来做什么的)可分为创建型(creational)、结构型(structural)和行为型(behavioral)三种。以下是GoF的23 中经典模式的分类。第二章 FileUpload组件简介2.1.FileUpload组

7、件由来及使用FileUpload 是 Apache commons下面的一个子项目,用来实现Java环境下面的文件上传功能,与常见的Smartypants齐名。需要注意的是FileUpload组件在使用时依赖于Commons IO组件,因此在继续之前,要确保在你的工程classpath中有描述页中提到的相应版本,本次课程实际使用的FileUpload版本为:commons- fileupload-1.3.1,Commons IO版本为:commons-io-1.4。2.2.FileUpload组件的工作原理上传的文件要求包括一个根据RFC 1867(在HTML中基于表单的文件)编码的选项列表清

8、单。组件FileUpload可以解析这个请求,并给你的应用程序提供一份独立上传的项目清单。无论每个项目背后如何执行都实现了FileItem接口。这里将描述组件FileUpload库的普通API,这些API比较简单。不过,对于最终的实现,你可以参考最新的API流。每一个文件项目都有一些属性,这些可能在你的应用程序中应用到。比如:每一个项目有一个名称name和内容类型content type,并提供了一个 InputStream访问其数据。另一方面,你处理项目的方法可能有所不同,这个依赖于是否这个项目是一个规则的表单域,即:这个数据是来自普通的表单文本,还是普通的HTML域或是一个上传文件。在Fi

9、leItem接口中提供了处理这些问题的方法,可以更加方便的去访问这些数据。组件FileUpload使用FileItemFactory工厂创建新 的文件项目。这个给了组件FileUpload很大的灵活性。这个工厂拥有怎样创建项目的最终控制权。工厂执行过程中上传项目文件的临时数据可以存储在内 存中或硬盘上。这个依赖于上传项目的大小(即:数据的字节)。不过这种行为可以在你的应用程序中适当的自定制。2.3 FileUpload组件中部分接口、类简介2.3.1 FileItem接口 mons.fileupload.disk.DiskFileItem实现了FileItem接口,用来封装单个表单字段元素的数

10、据。通过调用FileItem 定义的方法可以获得相关表单字段元素的数据。2.3.2 FileUpload类 FileUpload类的继承结构:java.lang.Objectmons.fileupload.FileUploadBase mons.fileupload.FileUpload2.3.3 DiskFileItemFactory 此类将请求消息实体中的每一个项目封装成单独的DiskFileItem (FileItem接口的实现) 对象的任务由 mons.fileupload.FileItemFactory 接口的默认实现 mons.fileupload.disk.DiskFileIte

11、mFactory 来完成。当上传的文件项目比较小时,直接保存在内存中(速度比较快),比较大时,以临时文件的形式,保存在磁盘临时文件夹(虽然速度慢些,但是内存资源是 有限的)。2.3.4 ServletFileUpload类 mons.fileupload.servlet.ServletFileUpload类是Apache文件上传 组件处理文件上传的核心高级类(所谓高级就是不需要管底层实现,暴露给用户的简单易用的接口)。使用其 parseRequest(HttpServletRequest) 方法可以将通过表单中每一个HTML标签提交的数据封装成一个FileItem对象,然后以List列表的形式

12、返回。第三章 设计模式在FileUpload组件中的应用3.1工厂方法模式在FileUpload组件中的应用 3.1.1 工厂方法模式定义工厂方法模式(Factory Method Pattern)定义:工厂方法模式又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。 3.1.2 工厂方法模式

13、结构 1. Product(抽象产品)抽象产品是定义产品的接口,是工厂方法模式所创建对象的超类型,也就是产品对象的共同父类或接口。 2.ConcreteProduct(具体产品)具体产品实现了抽象产品接口,某种类型的具体产一一对应。 3.Factory(抽象工厂)在抽象工厂类中,声明了工厂方法(Factory Method)厂方法模式的核心,它与应用程序无关。任何在模式中创建对象的工厂类都必须实现该接口。4.ConcreteFactory(具体工厂)具体工厂是抽象工厂类的子类,实现了抽象工厂中返回一个具体产品类的实例。在具体工厂类中包含与应用程序调用以创建产品对象。 3.1.3 模式分析工厂方

14、法模式是简单工厂模式的进一步抽象和推广。工厂方法模式保持了简单工厂模式的优点,而且克服了的工厂类不再负责所有产品的创建,而是将具体创建工负责给出具体工厂必须实现的接口,而不负责哪一个产方法模式可以允许系统在不修改工厂角色的情况下引进类与产品类往往具有平行的等级结构,它们之间一一对应。通过分析,该组件中应用了工厂方法模式的类如下:FileItemFactory类(抽象工厂):是工厂方法的核心,它与应用程序无关。包含了抽象的工厂方法:FileItem createItem( String fieldName, String contentType, boolean isFormField, Str

15、ing fileName );返回一个抽象产品FileItem对象。DiskFileItemFactory类(具体工厂):实现了抽象工厂方法FileItem createItem(),在工厂方法中创建并返回一个对象的具体产品。public FileItem createItem(String fieldName, String contentType, boolean isFormField, String fileName) DiskFileItem result = new DiskFileItem(fieldName, contentType, isFormField, fileName

16、, sizeThreshold, repository); FileCleaningTracker tracker = getFileCleaningTracker(); if (tracker != null) tracker.track(result.getTempFile(), result); return result;FileItem类(抽象产品),是一个接口,其中包含了产品类所具有的所有的业务方法。InputStream getInputStream() throws IOException;String getContentType();String getName();boo

17、lean isInMemory();long getSize();byte get();String getString(String encoding) throws UnsupportedEncodingException;String getString();void write(File file) throws Exception;void delete();String getFieldName();void setFieldName(String name);boolean isFormField();void setFormField(boolean state);Output

18、Stream getOutputStream() throws IOException;DiskFileItem类(具体产品类):是抽象产品FileItem接口的子类,实现了FileItem接口中所有的业务方法,以下就其中的部分方法的实现做介绍: public InputStream getInputStream() throws IOException if (!isInMemory() return new FileInputStream(dfos.getFile(); if (cachedContent = null) cachedContent = dfos.getData(); re

19、turn new ByteArrayInputStream(cachedContent);3.2 策略模式在FileUpload组建中的应用3.2.1 策略模式定义策略模式(Strategy Pattern)定义:定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)策略模式是一种对象行为型模式。3.2.2 策略模式结构图3.2.2.1 Context(环境类) 环境类是使用算法的角色,它在解决某个问题时可以采用多种策略。在环境类中维护一个对抽象策略类的引用实例,用于定义所采用的策略。3.2.2.2 Strategy(

20、抽象策略类)抽象策略类为所支持的算法申明了抽象方法,是所有策略类的父类,他可以是抽象类也可以是接口。环境类使用在其中声明的方法调用在具体策略类中实现的算法。3.2.2.3 concretStrategy(具体策略类)具体策略类实现了在抽象策略中定义的算法,在运行时,具体策略类将覆盖在环境泪中定义的抽象策略类对象,使用一种具体的算法实现某个业务处理。3.2.3 策略模式分析策略模式是对算法的封装,它把算法的责任和算法本身分割开,委派给不同的对象管理。策略模式通常把一个系列的算法封装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是“准备一组算法,并将每一个算法封装起来,使得它们可

21、以互换”。3.2.4策略模式在FileUpload组件中的分析类图如下:FileUpload类 (环境类) public class FileUpload extends FileUploadBase private FileItemFactory fileItemFactory; public FileUpload() super(); public FileUpload(FileItemFactory fileItemFactory) super(); this.fileItemFactory = fileItemFactory; public FileItemFactory getFil

22、eItemFactory() return fileItemFactory; public void setFileItemFactory(FileItemFactory factory) this.fileItemFactory = factory; FileUpload类是环境类,他定义并维持了对抽象策略类的一个引用,通过其方法private FileItemFactory fileItemFactory;可以在运行时设置一种具体策略,并在其算法下调用策略类提供的算法完成相应的业务处理。FileItemFactory类(抽象策略类)public interface FileItemFact

23、ory FileItem createItem( String fieldName, String contentType, boolean isFormField, String fileName );FileItemFactory作为抽象策略类,它定义了算法的抽象定义,而在其子类DiskFileItemFactory类中实现了具体算法。DiskFileItemFactory类(具体策略类)public class DiskFileItemFactory implements FileItemFactory public static final int DEFAULT_SIZE_THRES

24、HOLD = 10240; private File repository; private int sizeThreshold = DEFAULT_SIZE_THRESHOLD; private FileCleaningTracker fileCleaningTracker; public DiskFileItemFactory() this(DEFAULT_SIZE_THRESHOLD, null); public DiskFileItemFactory(int sizeThreshold, File repository) this.sizeThreshold = sizeThresho

25、ld; this.repository = repository; public File getRepository() return repository; public void setRepository(File repository) this.repository = repository; public int getSizeThreshold() return sizeThreshold; public void setSizeThreshold(int sizeThreshold) this.sizeThreshold = sizeThreshold; public Fil

26、eItem createItem(String fieldName, String contentType, boolean isFormField, String fileName) DiskFileItem result = new DiskFileItem(fieldName, contentType, isFormField, fileName, sizeThreshold, repository); FileCleaningTracker tracker = getFileCleaningTracker(); if (tracker != null) tracker.track(re

27、sult.getTempFile(), result); return result; public FileCleaningTracker getFileCleaningTracker() return fileCleaningTracker; public void setFileCleaningTracker(FileCleaningTracker pTracker) fileCleaningTracker = pTracker; DiskFileItemFactory类作为FileItemFactory类的子类,是一种具体策略类,实现了抽象策略类中的方法。3.3 迭代器模式在FileU

28、pload组建中的应用3.3.1 迭代器模式定义迭代器模式(Iterator pattern)定义:提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。3.3.2 迭代器模式结构迭代器模式包含如下角色:1. Iterator(抽象迭代器)抽象迭代器定义了访问和遍历元素的接口,一般声明如下方法:用于获取第一个元素的first(),用于访问下一个元素的next(),用于判断是否还有下一个元素的 hasNext( ),用于获取当前元素的。urrentltemO,在其子类中将实现这些方法。2. Concretelterator(具体迭代器)具体迭代器实现了抽象迭代器接口,完成对聚合对象的遍历,同时在对聚合进行遍历时跟踪其当前位置。3. Aggregate(抽象聚合类)抽象聚合类用于存储对象,并定义创建相应迭代器对象的接口,声明一个createIterator()方法用于创建一个迭代器对象。4.ConcreteAggregate(具体聚合类)具体聚合类实现了创建相应迭代器的接口,实现了在聚合类中声明的createltera

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2