设计模式十二.docx

上传人:b****6 文档编号:5066839 上传时间:2022-12-13 格式:DOCX 页数:15 大小:18.08KB
下载 相关 举报
设计模式十二.docx_第1页
第1页 / 共15页
设计模式十二.docx_第2页
第2页 / 共15页
设计模式十二.docx_第3页
第3页 / 共15页
设计模式十二.docx_第4页
第4页 / 共15页
设计模式十二.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

设计模式十二.docx

《设计模式十二.docx》由会员分享,可在线阅读,更多相关《设计模式十二.docx(15页珍藏版)》请在冰豆网上搜索。

设计模式十二.docx

设计模式十二

一.实验目的

1.熟悉UML统一建模语言;

2.回顾熟悉建造模式、原型模式;

3.熟悉XML文件的操作;

4.熟悉java的反射机制。

二.实验内容

(1)某软件公司欲开发一个音频和视频播放软件,为了给用户使用提供方便,该播放软件提供了多种界面显示模式,如完整模式、精简模式、记忆模式、网络模式等。

在不同的显示模式下主界面的组成元素有所差异,如在完整模式下将显示菜单、播放列表、主窗口、控制条等,在精简模式下只显示主窗口和控制条,而在记忆模式下将显示主窗口、控制条、收藏列表等。

现使用建造者模式设计该软件。

(2)设计一个客户类Customer,其中客户地址存储在地址类Address中,用浅克隆和深克隆分别实现Customer对象的复制并比较这两种克隆方式的异同。

三.实验环境

PC微机;

Windows操作系统;

VisualStudio程序集成环境。

四.实验内容

(1)某软件公司欲开发一个音频和视频播放软件,为了给用户使用提供方便,该播放软件提供了多种界面显示模式,如完整模式、精简模式、记忆模式、网络模式等。

在不同的显示模式下主界面的组成元素有所差异,如在完整模式下将显示菜单、播放列表、主窗口、控制条等,在精简模式下只显示主窗口和控制条,而在记忆模式下将显示主窗口、控制条、收藏列表等。

现使用建造者模式设计该软件。

ModelBuilder.java

package设计模式实验十二周_1;

publicabstractclassModelBuilder{

protectedModelmodel=newModel();

publicabstractvoidbuildPlay();

publicabstractvoidbuildMenu();

publicabstractvoidbuildPlaylist();

publicabstractvoidbuildMainWindow();

publicabstractvoidbuildControlbar();

publicModelgetModel(){

returnmodel;

}

}

Diector.java

package设计模式实验十二周_1;

publicclassDiector{

privateModelBuildermb;

publicvoidsetModelBuilder(ModelBuildermb){

this.mb=mb;

}

publicModelconstruct(){

mb.buildPlay();

mb.buildMenu();

mb.buildPlaylist();

mb.buildMainWindow();

mb.buildControlbar();

returnmb.getModel();

}

}

Model.java

package设计模式实验十二周_1;

publicclassModel{

privateStringplay;

privateStringmenu;

privateStringplaylist;

privateStringmainWindow;

privateStringcontrolbar;

publicvoidsetPlay(Stringplay){

this.play=play;

}

publicvoidsetMenu(Stringmenu){

this.menu=menu;

}

publicvoidsetPlaylist(Stringplaylist){

this.playlist=playlist;

}

publicvoidsetMainWindow(StringmainWindow){

this.mainWindow=mainWindow;

}

publicvoidsetControlbar(Stringcontrolbar){

this.controlbar=controlbar;

}

publicStringgetPlay(){

return(this.play);

}

publicStringgetMenu(){

return(this.menu);

}

publicStringgetPlaylist(){

return(this.playlist);

}

publicStringgetMainWindow(){

return(this.mainWindow);

}

publicStringgetControlbar(){

return(this.controlbar);

}

}

CompleteModelBuilder.java

package设计模式实验十二周_1;

publicclassCompleteModelBuilderextendsModelBuilder{

publicvoidbuildPlay(){

model.setPlay("完整模式:

");

}

publicvoidbuildMenu(){

model.setMenu("显示菜单");

}

publicvoidbuildPlaylist(){

model.setPlaylist("显示播放列表");

}

publicvoidbuildMainWindow(){

model.setMainWindow("显示主窗口");

}

publicvoidbuildControlbar(){

model.setControlbar("显示控制条");

}

}

MemoryModelBuilder.java

package设计模式实验十二周_1;

publicclassMemoryModelBuilderextendsModelBuilder{

publicvoidbuildPlay(){

model.setPlay("记忆模式:

");

}

publicvoidbuildMenu(){

model.setMenu("不显示菜单");

}

publicvoidbuildPlaylist(){

model.setPlaylist("显示播放列表");

}

publicvoidbuildMainWindow(){

model.setMainWindow("显示主窗口");

}

publicvoidbuildControlbar(){

model.setControlbar("显示控制条");

}

}

NetworkModelBuilder.java

package设计模式实验十二周_1;

publicclassNetworkModelBuilderextendsModelBuilder{

publicvoidbuildPlay(){

model.setPlay("网络模式:

");

}

publicvoidbuildMenu(){

model.setMenu("显示菜单");

}

publicvoidbuildPlaylist(){

model.setPlaylist("不显示播放列表");

}

publicvoidbuildMainWindow(){

model.setMainWindow("显示主窗口");

}

publicvoidbuildControlbar(){

model.setControlbar("显示控制条");

}

}

ShortModelBuilder.java

package设计模式实验十二周_1;

publicclassShortModelBuilderextendsModelBuilder{

publicvoidbuildPlay(){

model.setPlay("精简模式:

");

}

publicvoidbuildMenu(){

model.setMenu("显示菜单");

}

publicvoidbuildPlaylist(){

model.setPlaylist("不显示播放列表");

}

publicvoidbuildMainWindow(){

model.setMainWindow("不显示主窗口");

}

publicvoidbuildControlbar(){

model.setControlbar("显示控制条");

}

}

Client.java

package设计模式实验十二周_1;

publicclassClient{

publicstaticvoidmain(Stringargs[]){

ModelBuildermb=(ModelBuilder)XMLUtil.getBean();

Diectordiector=newDiector();

diector.setModelBuilder(mb);

Modelmodel=diector.construct();

System.out.println(model.getPlay());

System.out.println(model.getMenu());

System.out.println(model.getPlaylist());

System.out.println(model.getMainWindow());

System.out.println(model.getControlbar());

}

}

XMLUtil.java

package设计模式实验十二周_1;

importjava.io.*;

publicclassXMLUtil

{

publicstaticObjectgetBean()

{

try

{

DocumentBuilderFactorydFactory=DocumentBuilderFactory.newInstance();

DocumentBuilderbuilder=dFactory.newDocumentBuilder();

Documentdoc;

doc=builder.parse(newFile("configModel.xml"));

NodeListnl=doc.getElementsByTagName("classname");

NodeclassNode=nl.item(0).getFirstChild();

StringcName=classNode.getNodeValue();

Classc=Class.forName(cName);

Objectobj=c.newInstance();

returnobj;

}

catch(Exceptione)

{

e.printStackTrace();

returnnull;

}

}

}

configModel.xml

设计模式实验十二周_1.MemoryModelBuilder

UML_1

运行结果:

(2)设计一个客户类Customer,其中客户地址存储在地址类Address中,用浅克隆和深克隆分别实现Customer对象的复制并比较这两种克隆方式的异同。

浅克隆

Client.java

package设计模式实验十二周_2_1;

publicclassClient{

publicstaticvoidmain(String[]args){

Addressaddress=newAddress("东北",,);

Customerxiaoming=newCustomer("001","小明",13,address);

Customerxiaohong=xiaoming.clone();

xiaohong.setName("小红");

xiaohong.setId("002");

xiaoming.show();

System.out.println("----------");

xiaohong.show();

System.out.println("----------");

System.out.println(xiaoming.equals(xiaohong));

System.out.println(xiaoming.getAddr().equals(xiaohong.getAddr()));

}

}

Address.java

package设计模式实验十二周_2_1;

publicclassAddress{

privateStringhome;

privateStringemail;

privateStringphone;

publicAddress(Stringhome,Stringemail,Stringphone){

this.setHome(home);

this.setEmail(email);

this.setPhone(phone);

}

publicStringgetHome(){

returnhome;

}

publicvoidsetHome(Stringhome){

this.home=home;

}

publicStringgetEmail(){

returnemail;

}

publicvoidsetEmail(Stringemail){

this.email=email;

}

publicStringgetPhone(){

returnphone;

}

publicvoidsetPhone(Stringphone){

this.phone=phone;

}

publicvoidshowAddress(){

System.out.println("Address:

");

System.out.println("Home:

"+getHome());

System.out.println("Email:

"+getEmail());

System.out.println("Phone:

"+getPhone());

}

}

Customer.java

package设计模式实验十二周_2_1;

publicclassCustomerimplementsCloneable{

privateStringid;

privateStringname;

privateintage;

privateAddressaddr;

publicCustomer(Stringid,Stringname,intage,Addressaddr){

this.setId(id);

this.setName(name);

this.setAge(age);

this.setAddr(addr);

}

publicStringgetId(){

returnid;

}

publicvoidsetId(Stringid){

this.id=id;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicintgetAge(){

returnage;

}

publicvoidsetAge(intage){

this.age=age;

}

publicAddressgetAddr(){

returnaddr;

}

publicvoidsetAddr(Addressaddr){

this.addr=addr;

}

publicCustomerclone(){

Customercus=null;

try{

cus=(Customer)super.clone();

}catch(CloneNotSupportedExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

returncus;

}

publicvoidshow(){

System.out.println("id:

"+getId()+"name:

"+getName()+"age:

"+getAge());

getAddr().showAddress();

}

}

UML_2

运行结果:

深克隆

Client.java

package设计模式实验十二周_2_2;

publicclassClient{

publicstaticvoidmain(String[]args){

Addressaddress=newAddress("东北",,);

Customerxiaoming=newCustomer("001","小明",13,address);

Customerxiaohong=xiaoming.clone();

xiaohong.setName("小红");

xiaohong.setId("002");

xiaoming.show();

System.out.println("----------");

xiaohong.show();

System.out.println("----------");

System.out.println(xiaoming.equals(xiaohong));

System.out.println(xiaoming.getAddr().equals(xiaohong.getAddr()));

}

}

Address.java

package设计模式实验十二周_2_2;

importjava.io.*;

publicclassAddressimplementsSerializable{

privateStringhome;

privateStringemail;

privateStringphone;

publicAddress(Stringhome,Stringemail,Stringphone){

this.setHome(home);

this.setEmail(email);

this.setPhone(phone);

}

publicStringgetHome(){

returnhome;

}

publicvoidsetHome(Stringhome){

this.home=home;

}

publicStringgetEmail(){

returnemail;

}

publicvoidsetEmail(Stringemail){

this.email=email;

}

publicStringgetPhone(){

returnphone;

}

publicvoidsetPhone(Stringphone){

this.phone=phone;

}

publicvoidshowAddress(){

System.out.println("Address:

");

System.out.println("Home:

"+getHome());

System.out.println("Email:

"+getEmail());

System.out.println("Phone:

"+getPhone());

}

}

Customer.java

package设计模式实验十二周_2_2;

importjava.io.*;

publicclassCustomerimplementsSerializable{

privateStringid;

privateStringname;

privateintage;

privateAddressaddr;

publicCustomer(Stringid,Stringname,intage,Addressaddr){

this.setId(id);

this.setName(name);

this.setAge(age);

this.setAddr(addr);

}

publicStringgetId(){

returnid;

}

publicvoidsetId(Stringid){

this.id=id;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicintgetAge(){

returnage;

}

publicvoidsetAge(intage){

this.age=age;

}

publicAddressgetAddr(){

returnaddr;

}

publicvoidsetAddr(Addressaddr){

this.addr=addr;

}

publicCustomerclone(){

Customercus=null;

try{

ByteArrayOutputStreambaos=newByteArrayOutputStream();

ObjectOutputStreamoos=newObjectOutputStream(baos);

oos.writeObject(this);

ByteArrayInputStreambais=newByteArrayInputStream(baos.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1