第3章创建型模式实训文档格式.docx
《第3章创建型模式实训文档格式.docx》由会员分享,可在线阅读,更多相关《第3章创建型模式实训文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
protectedintnumberB;
//numberA和numberB的Setter方法和Getter方法省略
public
(1)intgetResult();
}
classAddOperationextendsOperation
publicintgetResult()
{
returnnumberA+numberB;
}
classSubOperationextendsOperation
returnnumberA-numberB;
classCalculator
{
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();
publicabstr