哈尔滨工业大学华德应用技术学院实验报告课程名称:软件设计模式系别:计算机应用技术系专业:软件工程学号:1099111130姓名:陈天任学期:2012年春季学期实验成绩:计算机应用技术系监制-1-实验名称一:单例模式实验时间:2012.4.21学时:2实验地点:s203实验目的:掌握饿式单例、懒式单例模式的基本实现形式,并体会两种实现方式的特点。掌握单例模式的基本应用。实验步骤:在项目的开发过程中,经常需要读取配置文件,根据配置文件的参数决定具体的软件业务逻辑。ReadConfig.java程序实例实现了从配置文件”zzr.ini”文件中读取data参数值的功能。zzr.ini文件内容如下:data=123456789importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.InputStream;importjava.util.Properties;publicclassReadConfig{privateStringparamA;publicReadConfig(){Propertiesp=newProperties();try{p.load(newFileInputStream(zzr.txt));this.paramA=p.getProperty(data);}catch(FileNotFoundExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}publicStringgetParamA(){returnparamA;}publicvoidsetParamA(StringparamA){this.paramA=paramA;}-2-publicstaticvoidmain(Stringargs[]){ReadConfigrc=newReadConfig();System.out.println(配置文件的值为:+rc.getParamA());}}1、运行如上程序写出运行结果配置文件的值为:1234567892、如上程序,参照JDK帮助文档,逐行写出注释。importjava.io.*;//引入IO包importjava.util.Properties;//引入util包的Properties类publicclassReadConfig//创建ReadConfig类{privateStringparamA;//定义个私有的字符串publicReadConfig()//第一构造方法{Propertiesp=newProperties();//new一个Propertier类的实例try//抓文件不存在和io异常{p.load(newFileInputStream(d:/zzr.ini));//创建连接文件的流this.paramA=p.getProperty(data);//设置paramA的值等于文件中的DATA的属性}catch(FileNotFoundExceptione)//处理异常{e.printStackTrace();//在控制台显示异常,给开发者看的}catch(IOExceptione){e.printStackTrace();}}publicStringgetParamA()//定义一个方法返回字符串类型的paramA的值{returnparamA;}publicvoidsetParamA(StringparamA)//定义一个方法设置paramA的值{this.paramA=paramA;}publicstaticvoidmain(Stringargs[])//main主方法{ReadConfigrc=newReadConfig();//实例化ReadConfig一个实例System.out.println(配置文件的值为:+rc.getParamA());//输出paramA的值}}-3-3、在程序中,通过newReadConfig();来得到配置文件的内容。在一个项目中,有可能多处使用配置文件,就需要我们多次进行new操作。每一次的new都是一次读取外部文件的过程,然后将读取到得的参数值,放到内存中。这样势必会造成系统资源的浪费。把如上问题总结一下:能不能再系统运行的过程中,控制某个类仅有一个实例。importjava.io.*;importjava.util.Properties;publicclassReadConfig{privatestaticStringparamA=null;privatestaticReadConfigrc=null;privateReadConfig(){Propertiesp=newProperties();try{p.load(newFileInputStream(d:/zzr.ini));paramA=p.getProperty(data);}catch(FileNotFoundExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}publicstaticsynchronizedReadConfiggetIntance(){if(rc==null){rc=newReadConfig();}returnrc;}publicStringgetParamA(){returnparamA;}publicstaticvoidmain(Stringargs[]){ReadConfigfq=ReadConfig.getIntance();System.out.println(配置文件的值为:+fq.getParamA());}}实验总结:通过实验对单例模式有了深刻的理解。知道了单例模式具体两种的的使用方法和何时使用单例模式等。-4-实验名称二:简单工厂模式实验时间:2012.4.21学时:2实验地点:s203实验目的:掌握简单工厂模式的基本实现形式。体会单工厂模式的特点。掌握单工厂模式的基本应用。实验步骤:IUserDAO.javapublicinterfaceIUserDAO{voidgetUserByID(intid);}MSServerDAO.javapublicclassMSServerUserDAOimplementsIUserDAO{publicvoidgetUserByID(intid){System.out.println(ID:+id);}}Factory.javapublicclassfactory{publicstaticIUserDAOcreateISD(inta){IUserDAOuser=null;if(a==1){user=newMSServerUserDAO();}returnuser;}}Zzr.java-5-publicclasszzr{publicstaticvoidmain(String[]args){IUserDAOfq=factory.createISD(1);fq.getUserByID(7);}}3.3扩展IUserDAO接口实现----MySqlUserDAO,并且完成客户端,对扩展功能的调用。IUserDAO.javapublicinterfaceIUserDAO{voidgetUserByID(intid);}MSServerDAO.javapublicclassMSServerUserDAOimplementsIUserDAO{publicvoidgetUserByID(intid){System.out.println(MSServerDAOID:+id);}}MySqlUserDAO.javapublicclassMySqlUserDAOimplementsIUserDAO{publicvoidgetUserByID(intid){System.out.println(MySqlUserDAOID:+id);}}Factory.javapublicclassfactory{publicstaticIUserDAOcreateISD(inta){IUserDAOuser=null;if(a==1){user=newMSServerUserDAO();}returnuser;}}Zzr.javapublicclasszzr{publicstaticvoidmain(String[]args){IUserDAOfq=factory.createISD(1);fq.getUserByID(7);}}实验总结:通过实验的学习知道何时应用简单工厂模式和使用简单工厂带来的好处。-6-实验名称三:工厂方法模式实验时间:2012.5.7学时:2实验地点:实验目的:掌握工厂方法模式的基本实现形式,体会工厂方法模式的特点,掌握工厂方法模式的基本应用。实验步骤:实现一个导出数据的框架,来让用户选择数据的导出方式,要求导出的数据格式:xml,txt。具体的导出方法只提供示意实现即可,重点体会框架的总体设计。publicinterfaceSend{voidsend();}publicclassXMLSendimplementsSend{publicvoidsend(){System.out.println(XML导出);-7-}}publicclassTXTSendimplementsSend{publicvoidsend(){System.out.println(TXT导出);}}publicabstractclassSendFactory{publicabstractSendfactoryMethod();publicvoidgetFactoryMethod(){factoryMethod().send();}}publicclassXMLFactoryextendsSendFactory{publicSendfactoryMethod(){returnnewXMLSend();}}publicclassTXTFactoryextendsSendFactory{publicSendfactoryMethod(){returnnewTXTSend();}}publicclassFanqiang{publicstaticvoidmain(String[]args){SendFactoryzzr=newTXTFactory();zzr.getFactoryMethod();}}3.4用户对于此框架,提出了新的需求,要求可以导出数据库格式的数据文件。publicinterfaceSend{voidsend();}publicclassXMLSendimplementsSend{publicvoidsend(){System.out.println(XML导出);}}publicclassTXTSendimplementsSend{publicvoidsend(){-8-System.out.println(TXT导出);}}publicclassSQLSendimplementsSend{publicvoidsend(){System.out.println(SQL导出);}}publicabstractclassSendFactory{publicabstractSendfactoryMethod();publicvoidgetFactoryMethod(){factoryMethod().send();}}publicclassXMLFactoryextendsSendFactory{publicSendfactoryMethod(){returnnewXMLSend();}}publicclassTXTFactoryextendsSendFactory{publicSendfa