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

上传人:b****1 文档编号:355617 上传时间:2022-10-09 格式:DOCX 页数:18 大小:261.15KB
下载 相关 举报
第3章创建型模式实训.docx_第1页
第1页 / 共18页
第3章创建型模式实训.docx_第2页
第2页 / 共18页
第3章创建型模式实训.docx_第3页
第3页 / 共18页
第3章创建型模式实训.docx_第4页
第4页 / 共18页
第3章创建型模式实训.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

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

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

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

第3章创建型模式实训

第3章创建型模式实训

3.3实训练习

3.3.2填空题

1.某系统提供一个简单计算器,具有简单的加法和减法功能,系统可以根据用户的选择实例化相应的操作类。

现使用简单工厂模式设计该系统,类图如图1所示:

图1类图

在图1中,Operation是抽象类,其中定义了抽象方法getResult(),其子类AddOperation用于实现加法操作,SubOperation用于实现减法操作,Calculator是简单工厂类,工厂方法为createOperation(),该方法接收一个char类型的字符参数,如果传入的参数为“+”,工厂方法返回一个AddOperation类型的对象,如果传入的参数为“-”,则返回一个SubOperation类型的对象。

【Java代码】

abstractclassOperation

{

protectedintnumberA;

protectedintnumberB;

//numberA和numberB的Setter方法和Getter方法省略

public

(1)intgetResult();

}

classAddOperationextendsOperation

{

publicintgetResult()

{

returnnumberA+numberB;

}

}

classSubOperationextendsOperation

{

publicintgetResult()

{

returnnumberA-numberB;

}

}

classCalculator

{

public

(2)createOperation(charoperator)

{

Operationop=null;

(3)

{

case'+':

op=(4);

break;

case'-':

op=(5);

break;

}

(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类图

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

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

【Java代码】

interfaceConvertorCreator

{

(1);

}

interfaceConvertor

{

publicStringtransform();

}

classDBConvertorCreatorimplementsConvertorCreator

{

publicConvertorgetConvertor()

{

(2);

}

}

classTXTConvertorCreatorimplementsConvertorCreator

{

publicConvertorgetConvertor()

{

(3);

}

}

classDBConvertorimplementsConvertor

{

publicStringtransform()

{

//实现代码省略

}

}

classTXTConvertorimplementsConvertor

{

publicStringtransform()

{

//实现代码省略

}

}

classTest

{

publicstaticvoidmain(Stringargs[])

{

ConvertorCreatorcreator;

(4);

creator=newDBConvertorCreator();

convertor=(5);

convertor.transform();

}

}

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

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

(7)。

(多选)

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

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

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

图1类图

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

【Java代码】

interfaceAbstractFactory

{

publicOperationControllergetOperationController();

publicInterfaceControllergetInterfaceController();

}

interfaceOperationController

{

publicvoidinit();

//其他方法声明省略

}

interfaceInterfaceController

{

publicvoidinit();

//其他方法声明省略

}

classSymbianFactoryimplementsAbstractFactory

{

publicOperationControllergetOperationController()

{

(1);

}

publicInterfaceControllergetInterfaceController()

{

(2);

}

}

classAndroidFactory(3)

{

publicOperationControllergetOperationController()

{

returnnewAndroidOperationController();

}

publicInterfaceControllergetInterfaceController()

{

returnnewAndroidInterfaceController();

}

}

classSymbianOperationController(4)

{

publicvoidinit(){

//实现代码省略

}

//其他方法声明省略

}

classAndroidOperationController(5)

{

publicvoidinit(){

//实现代码省略

}

//其他方法声明省略

}

classSymbianInterfaceControllerimplementsInterfaceController

{

publicvoidinit(){

//实现代码省略

}

//其他方法声明省略

}

classAndroidInterfaceControllerimplementsInterfaceController

{

publicvoidinit(){

//实现代码省略

}

//其他方法声明省略

}

classTest

{

publicstaticvoidmain(Stringargs[])

{

AbstractFactoryaf;

(6)oc;

(7)ic;

af=newSymbianFactory();

oc=(8);

ic=(9);

oc.init();

ic.init();

}

}

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

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

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

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

图1类图

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

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

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

【Java代码】

classMainScreen

{

publicStringmenu;

publicStringplayList;

publicStringmainWindow;

publicStringcontrolBar;

}

(1)classModeBuilder

{

protectedMainScreenscreen=newMainScreen();

publicabstractvoidbuildMenu();

publicabstractvoidbuildPlayList();

publicabstractvoidbuildMainWindow();

publicabstr

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

当前位置:首页 > 解决方案 > 学习计划

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

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