java实验报告.docx
- 文档编号:6576344
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:25
- 大小:62.82KB
java实验报告.docx
《java实验报告.docx》由会员分享,可在线阅读,更多相关《java实验报告.docx(25页珍藏版)》请在冰豆网上搜索。
java实验报告
哈尔滨工业大学华德应用技术学院
实验报告
课程名称:
软件设计模式
系别:
计算机应用技术系
专业:
数据库设计与开发
学期:
2012年春季学期
实验成绩:
计算机应用技术系监制
实验名称:
单例模式(Singleton)
实验时间:
2012.4.23
学时:
2学时
实验地点:
S208
实验目的:
1.掌握饿式单例、懒式单例模式的基本实现形式。
2.体会两种实现方式的特点。
3.掌握单例模式的基本应用。
实验步骤:
1.运行如上程序写出运行结果
配置文件的值为:
123456789
2.如上程序,参照JDK帮助文档,逐行写出注释
Importjava.io.FileInputStrean;//从文件系统中的某个文件中、获取输入字节
Importjava.io.FileNotFoundExeception;//当试图打开指定路径名表示的文件失败时,抛出此异常
Importjava.io.IoException;//当发生某种I/O异常时,抛出此异常
Importjava.io.InputStream;//字节输入流的所有类的超类
Importjava.util.Properties;//一个持久的属性集
PublicclassReadConfig//定义一个私有字符串paramA
{
PrivateStringparamA;//构造函数
{
Propertiesp=newProperties();//定义一个属性集对象
Try//进行异常处理
{
p.load(newFileInputStream(“zzr.ini”));//以面向行的格式加载zzr.ini文件
this.paramA=p.getProperty(“data”);//用指定的键在属性列表中搜索属性
}
Catch(FileNotFoundExceptione)//文件失败抛出异常
{
e.printStackTrace();//访问堆栈跟踪信息
}
}
PublicStirnggetParamA()//定义一个getParamA方法
{
ReturnparamA;//返回paramA的值
}
PublicvoidsetParamA(StringparamA)//用于设置paramA值的方法
{
This.paramA=paramA;//赋值
}
Publicstaticvoidmain(Stringargs[])//主方法
{
ReadConfigrc=newReadConfig();//定义ReadConfig类的对象rc
System.out.println(“配置文件的值为:
”+rc.getParamA());//输出配置文件中的值
}}
3.程序中,通过newReadConfig();来得到配置文件的内容。
在一个项目中,有可能多处使用配置文件,就需要我们多次进行new操作。
每一次的new都是一次读取外部文件的过程,然后将读取到得的参数值,放到内存中。
这样势必会造成系统资源的浪费。
把如上问题总结一下:
能不能再系统运行的过程中,控制某个类仅有一个实例。
好,用单例把如上程序完善了吧。
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.IOException;
importjava.io.InputStream;
importjava.util.Properties;
publicclassReadConfig
{
privateStringparamA;
publicstaticReadConfigFN=newReadConfig();
privateReadConfig()
{
Propertiesp=newProperties();
try
{
p.load(newFileInputStream("zzr.ini"));
this.paramA=p.getProperty("data");
}
catch(FileNotFoundExceptione)
{
e.printStackTrace();
}
catch(IOExceptione)
{
e.printStackTrace();
}
}
publicStringgetParamA()
{returnparamA;}
publicstaticReadConfiggetReadConfig()
{returnFN;}
publicvoidsetParamA(StringparamA)
{
this.paramA=paramA;
}
publicstaticvoidmain(Stringargs[])
{
ReadConfigFN=ReadConfig.getReadConfig();
System.out.println("配置文件的值为:
"+FN.getParamA());
}
}
实验总结:
掌握饿式单例、懒式单例模式的基本实现形式,体会两种实现方式的特点,掌握单例模式的基本应用。
实验名称:
简单工厂模式
实验时间:
2012.4.23
学时:
2学时
实验地点:
S208
实验目的:
1.掌握简单工厂模式的基本实现形式。
2.体会单工厂模式的特点。
3.掌握单工厂模式的基本应用。
实验步骤:
3.1使用简单工厂完善图2.1的设计,请画出类图。
3.2请根据类图写出代码。
IUserDAO.java
publicinterfaceIUserDAO
{
publicvoidgetUserByID(intid);
}
MSServerUserDAO.java
publicclassMSServerUserDAOimplementsIUserDAO
{
publicvoidgetUserByID(intid)
{
System.out.println("MSServer实现”);
}
}
Factory.java
publicclassFactory
{
publicstaticIUserDAOcreateIUserDAO()throwsException
{
returnnewMSServerUserDAO();
}
}
ZZR.java
publicclassZZR
{
publicstaticvoidmain(String[]args)
{
try
{
IUserDAOa=Factory.createIUserDAO();
a.getUserByID(5);
}
catch(Exceptione)
{
e.printStackTrace();
}
}
}
3.3扩展IUserDAO接口实现---->MySqlUserDAO,并且完成客户端,对扩展功能的调用。
MySqlUserDAO.java
publicclassMySqlUserDAOimplementsIUserDAO
{
publicvoidgetUserByID(intid)
{
System.out.println("MySql实现”);
}
ZZR.java
publicclassZZR
{
publicstaticvoidmain(String[]args)
{
try
{
IUserDAOa1=Factory.createIUserDAO("MSServerUserDAO");
a1.operation();
IUserDAOa2=Factory.createIUserDAO("MySqlUserDAO");
a2.operation();
}
catch(Exceptione)
{
e.printStackTrace();
}
}
}
实验总结:
掌握简单工厂模式的基本实现形式,体会单工厂模式的特点,掌握单工厂模式基本应用。
实验名称:
工厂方法模式
实验时间:
2012.05.07
学时:
2学时
实验地点:
S207
实验目的:
1、掌握工厂方法模式的基本实现形式。
2、体会工厂方法模式的特点。
3、掌握工厂方法模式的基本应用。
实验步骤:
1、工厂方法模式定义:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。
FactoryMethod使一个类的实例化延迟到其子类。
2.
抽象产品:
抽象类或接口,负责定义具体产品必须实现的方法。
具体产品1和具体产品2:
具体产品是一个类,如果抽象产品是一个类,那么具体产品1和具体产品2是抽象产品的子类,如果抽象是一个接口,那么具体产品是实现抽角产品的类。
创建者:
一个接口或抽象类。
构造者负责定义一个称作工厂方法的抽象方法,该方法返回具体产品类的实例。
具体创建者1和具体创建者2:
如果创建者是抽象类,具体创建者是创建者的子类;如果创建者是接口,具体创建者是实现创建的类。
具体创建者重写工厂方法使该方法返回具体产品。
4、根据图3.1写出工厂方法模式示意代码:
抽象产品.java
publicabstractclass抽象产品
{
publicabstractvoidC(Strings);
}
具体产品1.java
publicclass具体产品1extends抽象产品
{
publicvoidCXCP(Strings)
{
System.out.println("具体产品1的实现");
}
}
具体产品2.java
publicclass具体产品2extends抽象产品
{
publicvoidCXCP(Strings)
{
System.out.println("具体产品2的实现");
}
}
创建者.java
publicabstractclass创建者
{
publicabstract抽象产品get抽象产品();
}
具体创建者1.java
publicclass具体创建者1extends创建者
{
public抽象产品get抽象产品()
{
returnnew具体产品1();
}
}
具体创建者2.java
publicclass具体创建者2extends创建者
{
public抽象产品get抽象产品()
{
returnnew具体产品2();
}
}
5、简单工厂模式的通俗理解。
简单工厂模式方法模式的主要功能就是让创建者在不知道具体实现的情况下,完成自身功能的调用,而将具体的实现延迟到子类中去选择。
6、简单工厂和工厂方法的相同点和不同点
相同点:
换个地方new。
不同点:
三、应用扩展
3.2完善3.4类图设计的细节
3.3写出如上类图的同设计代码
ExportAPI.java
publicinterfaceExportAPI
{
voidexport(Stringcontent);
}
ExportTxt.java
publicclassExportTxtimplementsExportAPI
{
publicvoidexport(Stringcontent)
{
System.out.println("正在使用TXT格式导出"+content);
}
}
ExportXML.java
publicclassExportXMLimplementsExportAPI
{
publicvoidexport(Stringcontent)
{
System.out.println("正在使用XML格式导出"+content);
}
}
Operator.java
publicabstractclassOperator
{
protectedExportAPIgetExportAPI()
{
returnnewExportXML();
}
publicvoidexport(Stringcontent)
{
ExportAPIeapi=getExportAPI();
eapi.export(content);
}
}
TxtOpr.java
publicclassTxtOprextendsOperator
{
protectedExportAPIgetExportAPI()
{
returnnewExportTxt();
}
}
XMLOpr.java
publicclassXMLOprextendsOperator
{
protectedExportAPIgetExportAPI()
{
returnnewExportXML();
}
}
L.java
publicclassL
{
publicstaticvoidmain(String[]args)
{
TxtOprl=newTxtOpr();
l.export("大家好");
}
}
3.4用户对于此框架,提出了新的需求,要求可以导出数据库格式的数据文件。
完成新业务的实现,写出代码。
ExportAPI.java
publicinterfaceExportAPI
{
voidexport(Stringcontent);
}
ExportTxt.java
publicclassExportTxtimplementsExportAPI
{
publicvoidexport(Stringcontent)
{
System.out.println("正在使用TXT格式导出"+content);
}
}
ExportXML.java
publicclassExportXMLimplementsExportAPI
{
publicvoidexport(Stringcontent)
{
System.out.println("正在使用XML格式导出"+content);
}
}
ExportDB.java
publicclassExportDBimplementsExportAPI{
publicvoidexport(Stringcontent)
{
System.out.println("正在使用DB格式导出"+content);
}
}
Operator.java
publicclassOperator
{
protectedExportAPIgetExportAPI(inttype)throwsException
{
if(type==1)
returnnewExportDB();
else
if(type==2)
returnnewExportTxt();
else
thrownewException("所选择的类型不存在");
}
publicvoidexport(inttype,Stringcontent)
{
ExportAPIeapi;
try
{
eapi=getExportAPI(type);
eapi.export(content);
}
catch(Exceptione)
{
e.printStackTrace();
}
}
}
XMLOpr.java
publicclassXMLOprextendsOperator
{
protectedExportAPIgetExportAPI(inttype)throwsException{
if(type==1)
returnnewExportDB();
else
if(type==2)
returnnewExportTxt();
else
if(type==3)
returnnewExportXML();
else
thrownewException("所选择的类型不存在");
}
}
L.java
publicclassL
{
publicstaticvoidmain(String[]args)
{
TxtOprl=newTxtOpr();
l.export("我来了");
}
}
实验总结:
掌握工厂方法模式的基本实现形式,体会工厂方法模式的特点,掌握工厂方法模式的基本应用。
实验名称:
抽象工厂模式
实验时间:
2012.05.07
学时:
2学时
实验地点:
S207
实验目的:
1、掌握抽象工厂模式的基本实现形式。
2、体会抽象工厂模式的特点。
3、掌握抽象工厂模式的基本应用。
实验步骤:
三、应用扩展
3.1通过抽象工厂模式,改写组装电脑的实例,请绘制出设计类图。
3.2完成代码编写。
(1)、publicclassAMDCPUimplementsCPU{
publicvoid运行()
{System.out.println("我是AMD,我正在运行");}
}
(2)、AMD
publicclassAMD具体工厂implements抽象工厂{
publicObject得到部件(inttype)
{
if(type==1)
{
returnnewAMDCPU();
}else
if(type==2)
{
returnnewAMD主板();
}
else
returnnull;
}}
(3)、AMD主板
publicclassAMD主板implements主板{
publicvoid安装CPU()
{
System.out.println("AMD系列的CPU安装成功,可以运行");
}}
(4)、CPU
publicinterfaceCPU
{
void运行();
}
(5)、INTELCPU
publicclassIntelCPUimplementsCPU{
publicvoid运行()
{
System.out.println("我是IntelCPU,我正在运行");
}
}
(6)、INTEL
publicclassIntel具体工厂implements抽象工厂{
publicObject得到部件(inttype)
{
if(type==1)
{
returnnewIntelCPU();
}else
if(type==2)
{
returnnewIntel主板();
}
else
returnnull;
}}
(7)、INTEL主板
publicclassIntel主板implements主板{
publicvoid安装CPU()
{
System.out.println("Intel系列的CPU安装成功,可以运行...");
}
}
(8)、抽象工厂
publicinterface抽象工厂
{
Object得到部件(inttype);
}
(9)、顾客
publicclass顾客
{
publicstaticvoidmain(String[]args)
{
技术员zzr=new技术员();
zzr.装电脑(newIntel具体工厂());
}}
(10)、技术员
publicclass技术员
{
publicvoid装电脑(抽象工厂zzr)
{
主板zb=(主板)zzr.得到部件
(2);
CPUcpu=(CPU)zzr.得到部件
(1);
zb.安装CPU();
cpu.运行();
}}
(11)、主板
publicinterface主板
{
void安装CPU();
}
实验总结:
掌握抽象工厂模式的基本实现形式,体会抽象工厂模式的特点,掌握抽象工厂模式的基本应用。
实验名称:
策略模式
实验时间:
2012.05.14
学时:
2学时
实验地点:
S207
实验目的:
1、掌握策略模式的基本实现形式
2、体会策略模式的特点
3、掌握策略模式的基本应用
实验步骤:
3.3
策略.java
publicinterface策略
{publicdouble计算报价(doubleprice);}
价格.java
publicclass价格
{策略strategy;
publicvoid价格(策略stratrgy)
{
this.strategy=strategy;
}
publicdouble获得价格(doubleprice)
{if(strategy!
=null)
{returnstrategy.计算报价(price);}
return0;
}
}
普通用户.java
publicclass普通客户implements策略{
publicdouble计算报价(doubleprice)
{returnprice;}
}
老客户.java
publicclass老客户implements策略{
@Override
publicdouble计算报价(doubleprice)
{
returnprice*0.05;
}
}
大客户.java
publicclass大客户implements策略{
@Override
publicdouble计算报价(doubleprice)
{
returnprice*0.1;
}
}
3.4、用户
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 实验 报告