第3章 创建型模式实训Word下载.docx

上传人:b****2 文档编号:3176249 上传时间:2023-05-01 格式:DOCX 页数:19 大小:293.67KB
下载 相关 举报
第3章 创建型模式实训Word下载.docx_第1页
第1页 / 共19页
第3章 创建型模式实训Word下载.docx_第2页
第2页 / 共19页
第3章 创建型模式实训Word下载.docx_第3页
第3页 / 共19页
第3章 创建型模式实训Word下载.docx_第4页
第4页 / 共19页
第3章 创建型模式实训Word下载.docx_第5页
第5页 / 共19页
第3章 创建型模式实训Word下载.docx_第6页
第6页 / 共19页
第3章 创建型模式实训Word下载.docx_第7页
第7页 / 共19页
第3章 创建型模式实训Word下载.docx_第8页
第8页 / 共19页
第3章 创建型模式实训Word下载.docx_第9页
第9页 / 共19页
第3章 创建型模式实训Word下载.docx_第10页
第10页 / 共19页
第3章 创建型模式实训Word下载.docx_第11页
第11页 / 共19页
第3章 创建型模式实训Word下载.docx_第12页
第12页 / 共19页
第3章 创建型模式实训Word下载.docx_第13页
第13页 / 共19页
第3章 创建型模式实训Word下载.docx_第14页
第14页 / 共19页
第3章 创建型模式实训Word下载.docx_第15页
第15页 / 共19页
第3章 创建型模式实训Word下载.docx_第16页
第16页 / 共19页
第3章 创建型模式实训Word下载.docx_第17页
第17页 / 共19页
第3章 创建型模式实训Word下载.docx_第18页
第18页 / 共19页
第3章 创建型模式实训Word下载.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

第3章 创建型模式实训Word下载.docx

《第3章 创建型模式实训Word下载.docx》由会员分享,可在线阅读,更多相关《第3章 创建型模式实训Word下载.docx(19页珍藏版)》请在冰点文库上搜索。

第3章 创建型模式实训Word下载.docx

public

(2)createOperation(charoperator)

Operationop=null;

(3)

{

case'

+'

:

op=(4);

break;

-'

op=(5);

}

(6);

classTest

publicstaticvoidmain(Stringargs[])

intresult;

Operationop1=Calculator.createOperation('

);

op1.setNumberA(20);

op1.setNumberB(10);

result=(7);

System.out.println(result);

2.某软件公司欲开发一个数据格式转换工具,可以将不同数据源如txt文件、数据库、Excel表格中的数据转换成XML格式。

为了让系统具有更好的扩展性,在未来支持新类型的数据源,开发人员使用工厂方法模式设计该转换工具的核心类。

在工厂类中封装了具体转换类的初始化和创建过程,客户端只需使用工厂类即可获得具体的转换类对象,再调用其相应方法实现数据转换操作。

其类图如图1所示:

在图1中,ConvertorCreator是抽象工厂接口,它声明了工厂方法getConvertor(),在其子类中实现该方法,用于创建具体的转换对象;

Convertor是抽象产品接口,它声明了抽象数据转换方法transform(),在其子类中实现该方法,用于完成具体的数据转换操作。

类DBConvertor和TXTConvertor分别用于将数据库中的数据和txt文件中的数据转换为XML格式。

interfaceConvertorCreator

(1);

interfaceConvertor

publicStringtransform();

classDBConvertorCreatorimplementsConvertorCreator

publicConvertorgetConvertor()

(2);

classTXTConvertorCreatorimplementsConvertorCreator

(3);

}

classDBConvertorimplementsConvertor

publicStringtransform()

//实现代码省略

classTXTConvertorimplementsConvertor

ConvertorCreatorcreator;

(4);

creator=newDBConvertorCreator();

convertor=(5);

convertor.transform();

如果需要针对一种新的数据源进行数据转换,该系统至少需要增加(6)个类。

工厂方法模式体现了以下哪些面向对象设计原则?

(7)。

(多选)

A.开闭原则B.依赖倒转原则C.接口隔离原则D.单一职责原则E.合成复用原则

3.某手机游戏软件公司欲推出一款新的游戏软件,该软件能够支持Symbian、Android和WindowsMobile等多个主流的手机操作系统平台,针对不同的手机操作系统,该游戏软件提供了不同的游戏操作控制类和游戏界面控制类,并提供相应的工厂类来封装这些类的初始化。

软件要求具有较好的扩展性以支持新的操作系统平台,为了满足上述需求,采用抽象工厂模式进行设计所得类图如图1所示:

在该设计方案中,具体工厂类如SymbianFactory用于创建Symbian操作系统平台下的游戏操作控制类SymbianOperationController和游戏界面控制类SymbianInterfaceController,再通过它们的业务方法来实现对游戏软件的初始化和运行控制。

interfaceAbstractFactory

publicOperationControllergetOperationController();

publicInterfaceControllergetInterfaceController();

interfaceOperationController

publicvoidinit();

//其他方法声明省略

interfaceInterfaceController

classSymbianFactoryimplementsAbstractFactory

publicOperationControllergetOperationController()

(1);

publicInterfaceControllergetInterfaceController()

classAndroidFactory(3)

returnnewAndroidOperationController();

returnnewAndroidInterfaceController();

classSymbianOperationController(4)

publicvoidinit(){

classAndroidOperationController(5)

classSymbianInterfaceControllerimplementsInterfaceController

classAndroidInterfaceControllerimplementsInterfaceController

AbstractFactoryaf;

(6)oc;

(7)ic;

af=newSymbianFactory();

oc=(8);

ic=(9);

oc.init();

ic.init();

如何需要在上述设计方案中增加对WindowsMobile操作系统的支持,需对该设计方案进行哪些调整,简单说明实现过程。

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

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

现使用建造者模式设计该软件,所得类图如图1所示:

在该设计方案中,MainScreen是播放器的主界面,它是一个复合对象,包括菜单、播放列表、主窗口和控制条等成员。

ModeBuilder是一个抽象类,定义了一组抽象方法buildXXX()用于逐步构造一个完整的MainScreen对象,getScreen()是工厂方法,用于返回一个构造好的MainScreen对象。

ScreenModeController充当指挥者,用于指导复合对象的创建,其中construct()方法封装了具体创建流程,并向客户类返回完整的产品对象。

classMainScreen

publicStringmenu;

publicStringplayList;

publicStringmainWindow;

publicStringcontrolBar;

(1)classModeBuilder

protectedMainScreenscreen=newMainScreen();

publicabstractvoidbuildMenu();

publicabstractvoidbuildPlayList();

publicabstractvoidbuildMainWindow();

publicabstractvoidbuildControlBar();

publicMainScreengetScreen()

{

(2);

classFullModeBuilderextendsModeBuilder

publicvoidbuildMenu(){//实现代码省略}

publicvoidbuildPlayList(){//实现代码省略}

publicvoidbuildMainWindow(){//实现代码省略}

publicvoidbuildControlBar(){//实现代码省略}

classSimpleModeBuilderextendsModeBuilder

classScreenModeController

privateModeBuildermb;

publicvoidsetModeBuilder((3))

this.mb=mb;

publicMainScreenconstruct()

MainScreenms;

mb.buildMenu();

mb.buildPlayList();

mb.buildMainWindow();

mb.buildControlBar();

ms=(4);

returnms;

ScreenModeControllersmc=(5);

ModeBuildermb;

mb=newFullModeBuilder();

//构造完整模式界面

MainScreenscreen;

smc.setModeBuilder((6));

screen=(7);

System.out.println(screen.menu);

//其他代码省略

5.某数据处理软件需要增加一个图表复制功能,在图表对象中包含一个数据集对象,用于封装待显示的数据,可以通过界面的“复制”按钮将该图表复制一份,复制后可以得到新的图表对象,用户可以修改新图表的编号、颜色和数据。

现使用原型模式设计该软件,所得类图如图1所示:

在该设计方案中,DataChart类包含一个DataSet对象,在复制DataChart对象的同时将复制DataSet对象,因此需要使用深克隆技术,可使用流来实现深克隆。

importjava.io.*;

classDataSetimplementsSerializable

{//具体实现代码省略}

classColorimplementsSerializable

classDataChartimplementsSerializable

privateDataSetds=newDataSet();

privateColorcolor=newColor();

privateintno;

//成员属性的Getter方法和Setter方法省略

publicvoiddisplay(){

//具体实现代码省略

//使用流实现深克隆,复制容器的同时复制成员

public

(1)deepClone()throwsIOException,ClassNotFoundException,OptionalDataException

//将对象写入流中

ByteArrayOutputStreambao=newByteArrayOutputStream();

ObjectOutputStreamoos=new

(2);

oos.writeObject((3));

//将对象从流中取出

ByteArrayInputStreambis=newByteArrayInputStream(bao.toByteArray());

ObjectInputStreamois=new(4);

return((5));

DataChartchart1,chart2=null;

chart1=newDataChart();

try{

chart2=(DataChart)chart1.deepClone();

catch(Exceptione){

e.printStackTrace();

System.out.println(chart1==chart2);

System.out.println(chart1.getDs()==chart2.getDs());

System.out.println(chart1.getNo()==chart2.getNo());

编译并运行上述代码,输出结果为:

(6)、(7)、(8)。

在本实例中,DataChart类和DataSet类需要实现Serializable接口的原因是(9)。

6.为了避免监控数据显示不一致并节省系统资源,在某监控系统的设计方案中提供了一个主控中心类,该主控中心类使用单例模式进行设计,类图如图1所示:

在图1中,主控中心类MainControllerCenter是单例类,它包含一系列成员对象并可以初始化、显示和销毁成员对象,对应的方法分别为 

init()、load()和destroy(),此外还提供了静态工厂方法getInstance()用于创建MainControllerCenter类型的单例对象。

classMainControllerCenter

privateMenumenu;

//主控中心菜单

privateToolBartb;

//主控中心工具栏

privateMainFormmf;

//主控中心主窗口

private

(1)MainControllerCentermcc;

(2)MainControllerCenter{

publicvoidinit()

menu=newMenu();

tb=newToolBar();

mf=newMainForm();

publicvoidload()

menu.display();

tb.display();

mf.display();

publicvoiddestroy()

menu.destroy();

tb.destroy();

mf.destroy();

publicstaticMainControllerCentergetInstance()

if(mcc==null)

(3);

returnmcc;

MainControllerCentermcc1,mcc2;

mcc1=MainControllerCenter.getInstance();

mcc2=MainControllerCenter.getInstance();

System.out.println(mcc1==mcc2);

//其他代码省略

编译并运行上述代码,输出结果为(4)。

在本实例中,使用了(5)(填写懒汉式或饿汉式)单例模式,其主要优点是(6),主要缺点是(7)。

3.3.3综合题

1.使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数“M”,则返回一个Man对象,如果传入参数“W”,则返回一个Woman对象,用Java语言实现该场景。

现需要增加一个新的Robot类,如果传入参数“R”,则返回一个Robot对象,对代码进行修改并注意“女娲”的变化。

2.现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReader),如GIF图片读取器(GifReader)用于读取GIF格式的图片、JPG图片读取器(JpgReader)用于读取JPG格式的图片。

图片读取器对象通过图片读取器工厂ImageReaderFactory来创建,ImageReaderFactory是一个抽象类,用于定义创建图片读取器的工厂方法,其子类GifReaderFactory和JpgReaderFactory用于创建具体的图片读取器对象。

使用工厂方法模式实现该程序的设计。

3.计算机包含内存(RAM)、CPU等硬件设备,根据下面的“产品等级结构-产品族”示意图,使用抽象工厂模式实现计算机设备创建过程并绘制相应的类图。

4.电脑组装工厂可以将CPU、内存、硬盘、主机、显示器等硬件设备组装在一起构成一台完整的电脑,且构成的电脑可以是笔记本,也可以是台式机,还可以是不提供显示器的服务器主机。

对于用户而言,无须关心电脑的组成设备和组装过程,工厂返回给用户的是完整的电脑对象。

使用建造者模式实现电脑组装过程,要求绘制类图并编程实现。

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

绘制类图并编程实现。

6.使用单例模式的思想实现多例模式,确保系统中某个类的对象只能存在有限个,如两个或三个,设计并编写代码实现一个多例类。

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2