软件设计模式与标准体系结构.docx
- 文档编号:9320725
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:27
- 大小:210.80KB
软件设计模式与标准体系结构.docx
《软件设计模式与标准体系结构.docx》由会员分享,可在线阅读,更多相关《软件设计模式与标准体系结构.docx(27页珍藏版)》请在冰豆网上搜索。
软件设计模式与标准体系结构
计算机科学和技术学院
《软件设计模式和体系结构》
课程作业
(一)
(/第二学期)
学生姓名:
雷君
学生专业:
软件工程
学生班级:
142601
学生学号:
26170108
指导老师:
王飞
试验一
工厂方法模式——汽车保险
【试验内容】
在例2.3汽车保险管理应用程序实例上添加一个名为LuxuryCarInsurance类,而且,该类要和其它类一样能实施对应功效。
【添加代码】
1、添加LuxuryCarInsurance类:
publicclassLuxuryCarInsuranceimplementsAutoInsurance
{
privateStringdescription;
publicStringgetInsuranceDescription()
{
description="LuxuryCarInsurance:
\n\nLuxuryCarInsurancecoveragepays
formedicalbills"+
"lostwages,rehabilitation,treatmentand/or"+
"funeralcostsforanyoneinjuredorkilled"+
"byyourcar.Suchcoveragewillalsopayfor"+
"painandsufferingdamageswhenathird"+
"partysuccessfullysues.";
returndescription;
}
}
2、添加LuxuryCarPolicyProducer类:
publicclassLuxuryCarPolicyProducerimplementsPolicyProducer
{
publicAutoInsurancegetPolicyObj()//Fruitfactory()
{
returnnewLuxuryCarInsurance();
}
}
3、添加GUI:
(1)publicstaticfinalStringLUXURYCAR="LuxuryCarInsurance";
(2)cmbInsuranceType.addItem(LUXURYCAR);
(3)if(type.equals(LUXURYCAR)){
pp=newLuxuryCarPolicyProducer();
}
【试验结果】
【试验小结】
使用工厂方法访问而且初始化适宜类对象,简化了应用程序,应用程序本身不再含有大量条件语句判定何时选择哪个类。
其次,工厂方法实现了部分特殊某个类机制,尤其是层次结构不一样类需要不一样初始化方法时候。
抽象工厂方法模式——房屋信息
【试验内容】
在例2.4中设计而且实现了豪华(Super)和中等(Medum)别墅(House)和公寓(Condo)查询。
要求在该设计基础上,增加一个新类SemiDetacher(半独立式楼宇),而且编写代码实现对应查询功效。
【添加代码】
1、添加SemiDetacher类:
publicinterfaceSemiDetacher
{
publicStringgetSemiDetacherInfo();
publicStringgetSemiDetacherFeatures();
}
2、添加SuperSemiDetacher类:
publicclassSuperSemiDetacherimplementsSemiDetacher
{
privateStringname;
publicSuperSemiDetacher(StringcName)
{
name=cName;
}
publicStringgetSemiDetacherInfo()
{
return"superSemiDetacher.html";
}
publicStringgetSemiDetacherFeatures()
{
return"SuperSemiDetacher";
}
}
3、添加MediumSemiDetacher类:
publicclassMediumSemiDetacherimplementsSemiDetacher
{
privateStringname;
publicMediumSemiDetacher(StringcName)
{
name=cName;
}
publicStringgetSemiDetacherInfo()
{
return"MediumSemiDetacher.html";
}
publicStringgetSemiDetacherFeatures()
{
return"MediumSemiDetacher";
}
}
4、添加BuildingFactory:
publicabstractSemiDetachergetSemiDetacher();
5、添加MediumBuildingFactory:
publicSemiDetachergetSemiDetacher()
{
returnnewMediumSemiDetacher("MediumSemiDetacher");
}
6、添加SuperBuildingFactory:
publicSemiDetachergetSemiDetacher()
{
returnnewSuperSemiDetacher("SuperSemiDetacher");
}
7、添加GUI:
(1)publicstaticfinalStringSEMIDETACHER="SemiDetacher";
(2)cmbHouseType.addItem(SEMIDETACHER);
(3)if(type.equals(AbstractFactoryGUI.SEMIDETACHER)){
SemiDetachercd=bf.getSemiDetacher();
StringfileNm=cd.getSemiDetacherInfo();
putHouseInfoToScreen(fileNm);
}
【试验结果】
【试验小结】
当用户对象要从一个相关产品组中创建一个对象,而没有必需知道到底要创建哪个对象时,能够使用抽象工厂模式。
假如不使用抽象工厂模式,创建对象条件语句将会出现在用户程序很多地方,程序克维护性差。
抽象工厂模式帮助程序员避免了以上所述反复、复杂条件语句,提供必需创建对象接口。
试验二
组合模式——空军指挥系统
【试验内容】
在例3.3设计中,添加一个空军大队(Wing)类,该类和Squadron、Group类是平行,所以应该继承了AirUnit类。
该类写法和Squadron或Group类是类似,所不一样是一个Wing有216中类型飞机。
【添加代码】
1、添加Wing类:
publicclassWingextendsAirUnit{
publicstaticfinalStringFEATURES="AWingwith216aircrafts";
Airforce[]fighters=newAirforce[162];
Airforce[]bombers=newAirforce[18];
Airforce[]transporters=newAirforce[18];
Airforce[]eAircrafts=newAirforce[18];
publicWing(){
for(intk=0;k<162;k++){
//need162fighters
}
for(intk=0;k<18;k++){
//need18bombers
}
for(intk=0;k<18;k++){
//need18transporters
}
for(intk=0;k<18;k++){
//need18eAirplanes
}
}
publicStringgetDescription(){
returnFEATURES;
}
publicStringfight(){
returnsuper.fight();
}
}
2、添加GUI:
(1)privateString[]AirForceUnit={"SQUADRON","GROUP","WING"};
(2)add(1,6,airCheckBox[13]);
(3)elseif((m==13)&&(ckBoxStates[13]==SELECTED)){
unit=newWing();
airUnits.attach(unit);
unitInfo=unit.getDescription();
}
【试验结果】
【试验小结】
我们这么来简单了解组合模式,组合模式就是把部分现有对象或元素,经过组合后组成新对象,新对象提供内部方法,能够让我们很方便完成这些元素或内部对象访问和操作。
我们也能够把组合对象了解成一个容器,容器提供多种访问其内部对象或元素API,我们只需要使用这些方法就能够操作它了。
适配器模式——用户信息验证
【试验内容】
相关例3.7用于验证用户信息离架产品类CusInfoValidation功效扩展问题。
要求使用适配器模式。
【添加代码】
1、添加InformationAdapter:
publicbooleanisValidEmailAddr(StringEmailAddr){
booleanisValid=true;
inta=0;
intb=0;
Stringns=EmailAddr.trim();
StringnStr=ns.replaceAll("\\s{1,}","");
intlen=nStr.length();
if((((nStr.charAt(0)>='A')&&(nStr.charAt(0)>='Z'))||
((nStr.charAt(0)>='a')&&(nStr.charAt(0)>='z')))&&(len>=5)){
for(intm=0;m if((Character.isLetter(nStr.charAt(m))==true)&& (Character.isDigit(nStr.charAt(m))==true)){ isValid=false; } if(nStr.charAt(m)=='@'){ a++; } if(nStr.charAt(m)>='0'&&nStr.charAt(m)<='9'){ b++; } if((m==0)&&(Character.isLetter(nStr.charAt(m))==false)){ isValid=false; } } if(a! =1){ isValid=false; } if(b==0){ isValid=false; } returnisValid; } else{ returnfalse; } } 2、添加CusInfoValidator: publicabstractbooleanisValidEmailAddr(StringEmailAddr); 3、添加GUI: (1)privateJTextFieldtxtCustomerName,txtAddress,txtZip,txtCellPhone,txtSSN, txtEmailAddr; (2)privateJLabellblCustomerName,lblAddress,lblZip,lblCellphone,lblSSN, lblEmailAddr; (3)txtEmailAddr=newJTextField(20); (4)lblEmailAddr=newJLabel("EmailAddr: "); (5)UIPanel.add(lblEmailAddr); UIPanel.add(txtEmailAddr); (6)gridbag.setConstraints(lblEmailAddr,gbc); gbc.gridx=1; gbc.gridy=5; gridbag.setConstraints(txtEmailAddr,gbc); gbc.gridx=0; gbc.gridy=6; (7)publicStringgetEmailAddr(){ returntxtEmailAddr.getText(); } (8)Stringemailaddr=getEmailAddr(); (9)if(cusInfo.isValidEmailAddr(emailaddr)==false){ dataTextArea.append("\nWrongformatofEmailAddr."); } else{ dataTextArea.append("\nCorrectformatofEmailAddr."); } 【试验结果】 【试验小结】 经过适配器,用户端能够调用同一接口,所以对用户端来说是透明。 这么做更简单、更直接、更紧凑;复用了现存类,处理了现存类和复用环境要求不一致问题;将目标类和适配者类解耦,经过引入一个适配器类重用现有适配者类,而无需修改原有代码; 一个对象适配器能够把多个不一样适配者类适配到同一个目标,也就是说,同一个适配器能够把适配者类和它子类全部适配到目标接口。 对于对象适配器来说,更换适配器实现过程比较复杂。 试验三 桥接模式——几何立体体积 【试验内容】 在例3.14中设计试验层次类部分中,添加Ellipsoid(椭球)类,而且实现针对椭球体积计算。 【添加代码】 1、添加椭球类: publicclassEllipsoidimplementsGeoForm{ privatedoubleaRadius; privatedoublebRadius; privatedoublecRadius; publicEllipsoid(doubleaRadius,doublebRadius,doublecRadius){ this.aRadius=aRadius; this.bRadius=bRadius; this.cRadius=cRadius; } publicdoublecomputeVolume(){ doublevolume=1.3333333*3.1415926*aRadius*bRadius*cRadius; returnvolume; } } 2、添加GUI: (1)privateJTextFieldtxtEllipsoidRadius_a; privateJTextFieldtxtEllipsoidRadius_b; privateJTextFieldtxtEllipsoidRadius_c; (2)publicstaticfinalStringELLIPSOID="Ellipsoid"; (3)cmbGeoForm.addItem(ELLIPSOID); (4)elseif(selection.equals(ELLIPSOID)){ Stringa_radius=txtEllipsoidRadius_a.getText(); Stringb_radius=txtEllipsoidRadius_b.getText(); Stringc_radius=txtEllipsoidRadius_c.getText(); doublea=Double.valueOf(a_radius); doubleb=Double.valueOf(b_radius); doublec=Double.valueOf(c_radius); form=newEllipsoid(a,b,c); } (5)elseif(selection.equals(ELLIPSOID)) displayNewGUI(getTypePanel(ELLIPSOID)); (6)elseif(type.equals(ELLIPSOID)){ JLabellblRadius_a=newJLabel("InputRadiusa"); JLabellblRadius_b=newJLabel("InputRadiusb"); JLabellblRadius_c=newJLabel("InputRadiusc"); txtEllipsoidRadius_a=newJTextField(8); txtEllipsoidRadius_b=newJTextField(8); txtEllipsoidRadius_c=newJTextField(8); GridBagLayoutgridbag=newGridBagLayout(); typePanel.setLayout(gridbag); GridBagConstraintsgbc=newGridBagConstraints(); typePanel.add(lblRadius_a); typePanel.add(lblRadius_b); typePanel.add(lblRadius_c); typePanel.add(txtEllipsoidRadius_a); typePanel.add(txtEllipsoidRadius_b); typePanel.add(txtEllipsoidRadius_c); typePanel.add(lblMeasure); typePanel.add(cmbMeasure); gbc.insets.top=5; gbc.insets.bottom=5; gbc.insets.left=1; gbc.insets.right=8; gbc.anchor=GridBagConstraints.WEST; gbc.gridx=0; gbc.gridy=0; gridbag.setConstraints(lblRadius_a,gbc); gbc.gridx=1; gbc.gridy=0; gridbag.setConstraints(txtEllipsoidRadius_a,gbc); gbc.gridx=0; gbc.gridy=1; gridbag.setConstraints(lblRadius_b,gbc); gbc.gridx=1; gbc.gridy=1; gridbag.setConstraints(txtEllipsoidRadius_b,gbc); gbc.gridx=0; gbc.gridy=2; gridbag.setConstraints(lblRadius_c,gbc); gbc.gridx=1; gbc.gridy=2; gridbag.setConstraints(txtEllipsoidRadius_c,gbc); gbc.gridx=0; gbc.gridy=3; gridbag.setConstraints(lblMeasure,gbc); gbc.gridx=1; gbc.gridy=3; gridbag.setConstraints(cmbMeasure,gbc); } 【试验结果】 【试验小结】 经过这次试验我们大约了解了桥接模式,经过关联“抽象层次类”和“具体层次类”这一桥梁,将表示两个维度层类(数据结构)粘贴在一起,形成更大数据结构,而这种改变又不会对现有类产生影响,这种思绪终极想法是将软件设计抽象部分和实现部分分离,使它们全部能够独立改变。 访问者模式——计算机部件销售软件 【试验内容】 在例4.5设计中添加一个类SoundBox。 该类实现接口ComputerParts,而且其它计算机部件类结构类似。 【添加代码】 1、添加SoundBox类: publicclassSoundBoximplementsComputerParts{ publicstaticfinalStringNAME="SoundBox"; privatefinaldoublePRICE=127.00; publicstaticfinalStringFEATURES="SoundBox.X3K"; publicStringgetName(){ returnNAME; } publicdoublegetPrice(){ returnPRICE; } publicStringgetDescription(){ returnFEATURES; } publicvoidaccept(Visitorv){ System.out.println("SoundBoxhasbeenvisited."); v.visitSoundBox(this); } } 2、添加GUI: (1)String[]compParts={"Case","Motherboard","Microprocessor","Memory", "DriveController","VideoCard","Fan","PowerSupply", "HardDiskDrive
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件设计 模式 标准 体系结构
![提示](https://static.bdocx.com/images/bang_tan.gif)