设计模式十二.docx
- 文档编号:7214190
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:16
- 大小:221.95KB
设计模式十二.docx
《设计模式十二.docx》由会员分享,可在线阅读,更多相关《设计模式十二.docx(16页珍藏版)》请在冰豆网上搜索。
设计模式十二
一.实验目的
1.熟悉UML统一建模语言;
2.回顾熟悉建造模式、原型模式;
3.熟悉XML文件的操作;
4.熟悉java的反射机制。
二.实验内容
(1)某软件公司欲开发一个音频和视频播放软件,为了给用户使用提供方便,该播放软件提供了多种界面显示模式,如完整模式、精简模式、记忆模式、网络模式等。
在不同的显示模式下主界面的组成元素有所差异,如在完整模式下将显示菜单、播放列表、主窗口、控制条等,在精简模式下只显示主窗口和控制条,而在记忆模式下将显示主窗口、控制条、收藏列表等。
现使用建造者模式设计该软件。
(2)设计一个客户类Customer,其中客户地址存储在地址类Address中,用浅克隆和深克隆分别实现Customer对象的复制并比较这两种克隆方式的异同。
三.实验环境
PC微机;
Windows操作系统;
VisualStudio程序集成环境。
四.实验内容
(1)某软件公司欲开发一个音频和视频播放软件,为了给用户使用提供方便,该播放软件提供了多种界面显示模式,如完整模式、精简模式、记忆模式、网络模式等。
在不同的显示模式下主界面的组成元素有所差异,如在完整模式下将显示菜单、播放列表、主窗口、控制条等,在精简模式下只显示主窗口和控制条,而在记忆模式下将显示主窗口、控制条、收藏列表等。
现使用建造者模式设计该软件。
package设计模式实验十二周_1;
publicabstractclassModelBuilder{
protectedModelmodel=newModel();
publicabstractvoidbuildPlay();
publicabstractvoidbuildMenu();
publicabstractvoidbuildPlaylist();
publicabstractvoidbuildMainWindow();
publicabstractvoidbuildControlbar();
publicModelgetModel(){
returnmodel;
}
}
package设计模式实验十二周_1;
publicclassDiector{
privateModelBuildermb;
publicvoidsetModelBuilder(ModelBuildermb){
=mb;
}
publicModelconstruct(){
();
();
();
();
();
return();
}
}
package设计模式实验十二周_1;
publicclassModel{
privateStringplay;
privateStringmenu;
privateStringplaylist;
privateStringmainWindow;
privateStringcontrolbar;
publicvoidsetPlay(Stringplay){
=play;
}
publicvoidsetMenu(Stringmenu){
=menu;
}
publicvoidsetPlaylist(Stringplaylist){
=playlist;
}
publicvoidsetMainWindow(StringmainWindow){
=mainWindow;
}
publicvoidsetControlbar(Stringcontrolbar){
=controlbar;
}
publicStringgetPlay(){
return;
}
publicStringgetMenu(){
return;
}
publicStringgetPlaylist(){
return;
}
publicStringgetMainWindow(){
return;
}
publicStringgetControlbar(){
return;
}
}
package设计模式实验十二周_1;
publicclassCompleteModelBuilderextendsModelBuilder{
publicvoidbuildPlay(){
("完整模式:
");
}
publicvoidbuildMenu(){
("显示菜单");
}
publicvoidbuildPlaylist(){
("显示播放列表");
}
publicvoidbuildMainWindow(){
("显示主窗口");
}
publicvoidbuildControlbar(){
("显示控制条");
}
}
package设计模式实验十二周_1;
publicclassMemoryModelBuilderextendsModelBuilder{
publicvoidbuildPlay(){
("记忆模式:
");
}
publicvoidbuildMenu(){
("不显示菜单");
}
publicvoidbuildPlaylist(){
("显示播放列表");
}
publicvoidbuildMainWindow(){
("显示主窗口");
}
publicvoidbuildControlbar(){
("显示控制条");
}
}
package设计模式实验十二周_1;
publicclassNetworkModelBuilderextendsModelBuilder{
publicvoidbuildPlay(){
("网络模式:
");
}
publicvoidbuildMenu(){
("显示菜单");
}
publicvoidbuildPlaylist(){
("不显示播放列表");
}
publicvoidbuildMainWindow(){
("显示主窗口");
}
publicvoidbuildControlbar(){
("显示控制条");
}
}
package设计模式实验十二周_1;
publicclassShortModelBuilderextendsModelBuilder{
publicvoidbuildPlay(){
("精简模式:
");
}
publicvoidbuildMenu(){
("显示菜单");
}
publicvoidbuildPlaylist(){
("不显示播放列表");
}
publicvoidbuildMainWindow(){
("不显示主窗口");
}
publicvoidbuildControlbar(){
("显示控制条");
}
}
package设计模式实验十二周_1;
publicclassClient{
publicstaticvoidmain(Stringargs[]){
ModelBuildermb=(ModelBuilder)();
Diectordiector=newDiector();
(mb);
Modelmodel=();
}
}
package设计模式实验十二周_1;
import
import.*;
publicclassXMLUtil
{
publicstaticObjectgetBean()
{
try
{
DocumentBuilderFactorydFactory=();
DocumentBuilderbuilder=();
Documentdoc;
doc=(newFile(""));
NodeListnl=("classname");
NodeclassNode=(0).getFirstChild();
StringcName=();
Classc=(cName);
Objectobj=();
returnobj;
}
catch(Exceptione)
{
();
returnnull;
}
}
}
xmlversion=""?
>
UML_1
运行结果:
(2)设计一个客户类Customer,其中客户地址存储在地址类Address中,用浅克隆和深克隆分别实现Customer对象的复制并比较这两种克隆方式的异同。
浅克隆
package设计模式实验十二周_2_1;
publicclassClient{
publicstaticvoidmain(String[]args){
Addressaddress=newAddress("东北","","");
Customerxiaoming=newCustomer("001","小明",13,address);
Customerxiaohong=();
("小红");
("002");
();
"----------");
();
"----------");
}
}
package设计模式实验十二周_2_1;
publicclassAddress{
privateStringhome;
privateStringemail;
privateStringphone;
publicAddress(Stringhome,Stringemail,Stringphone){
(home);
(email);
(phone);
}
publicStringgetHome(){
returnhome;
}
publicvoidsetHome(Stringhome){
=home;
}
publicStringgetEmail(){
returnemail;
}
publicvoidsetEmail(Stringemail){
=email;
}
publicStringgetPhone(){
returnphone;
}
publicvoidsetPhone(Stringphone){
=phone;
}
publicvoidshowAddress(){
"Address:
");
"Home:
"+getHome());
"Email:
"+getEmail());
"Phone:
"+getPhone());
}
}
package设计模式实验十二周_2_1;
publicclassCustomerimplementsCloneable{
privateStringid;
privateStringname;
privateintage;
privateAddressaddr;
publicCustomer(Stringid,Stringname,intage,Addressaddr){
(id);
(name);
(age);
(addr);
}
publicStringgetId(){
returnid;
}
publicvoidsetId(Stringid){
=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
=age;
}
publicAddressgetAddr(){
returnaddr;
}
publicvoidsetAddr(Addressaddr){
=addr;
}
publicCustomerclone(){
Customercus=null;
try{
cus=(Customer)();
}catch(CloneNotSupportedExceptione){
howAddress();
}
}
UML_2
运行结果:
深克隆
package设计模式实验十二周_2_2;
publicclassClient{
publicstaticvoidmain(String[]args){
Addressaddress=newAddress("东北","","");
Customerxiaoming=newCustomer("001","小明",13,address);
Customerxiaohong=();
("小红");
("002");
();
"----------");
();
"----------");
}
}
package设计模式实验十二周_2_2;
import.*;
publicclassAddressimplementsSerializable{
privateStringhome;
privateStringemail;
privateStringphone;
publicAddress(Stringhome,Stringemail,Stringphone){
(home);
(email);
(phone);
}
publicStringgetHome(){
returnhome;
}
publicvoidsetHome(Stringhome){
=home;
}
publicStringgetEmail(){
returnemail;
}
publicvoidsetEmail(Stringemail){
=email;
}
publicStringgetPhone(){
returnphone;
}
publicvoidsetPhone(Stringphone){
=phone;
}
publicvoidshowAddress(){
"Address:
");
"Home:
"+getHome());
"Email:
"+getEmail());
"Phone:
"+getPhone());
}
}
package设计模式实验十二周_2_2;
import.*;
publicclassCustomerimplementsSerializable{
privateStringid;
privateStringname;
privateintage;
privateAddressaddr;
publicCustomer(Stringid,Stringname,intage,Addressaddr){
(id);
(name);
(age);
(addr);
}
publicStringgetId(){
returnid;
}
publicvoidsetId(Stringid){
=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
=age;
}
publicAddressgetAddr(){
returnaddr;
}
publicvoidsetAddr(Addressaddr){
=addr;
}
publicCustomerclone(){
Customercus=null;
try{
ByteArrayOutputStreambaos=newByteArrayOutputStream();
ObjectOutputStreamoos=newObjectOutputStream(baos);
(this);
ByteArrayInputStreambais=newByteArrayInputStream());
ObjectInputStreamois=newObjectInputStream(bais);
cus=(Customer)();
}catch(ClassNotFoundExceptione){
howAddress();
}
}
UML_3
运行结果:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 模式 十二