1、第3章 创建型模式实训培训资料第3章 创建型模式实训第3章 创建型模式实训3.3 实训练习3.3.2 填空题1. 某系统提供一个简单计算器,具有简单的加法和减法功能,系统可以根据用户的选择实例化相应的操作类。现使用简单工厂模式设计该系统,类图如图1所示:图1 类图在图1中,Operation是抽象类,其中定义了抽象方法getResult(),其子类AddOperation用于实现加法操作,SubOperation用于实现减法操作,Calculator是简单工厂类,工厂方法为createOperation(),该方法接收一个char类型的字符参数,如果传入的参数为“+”,工厂方法返回一个AddO
2、peration类型的对象,如果传入的参数为“-”,则返回一个SubOperation类型的对象。【Java代码】abstract class Operation protected int numberA; protected int numberB; / numberA和numberB的Setter方法和Getter方法省略 public (1) int getResult();class AddOperation extends Operation public int getResult() return numberA + numberB; class SubOperation ex
3、tends Operation public int getResult() return numberA - numberB; class Calculator public (2) createOperation(char operator) Operation op = null; (3) case +: op = (4) ; break; case -: op = (5) ; break; (6) ; class Test public static void main(String args) int result; Operation op1 = Calculator.create
4、Operation(+); op1.setNumberA(20); op1.setNumberB(10); result = (7) ; System.out.println(result); 2. 某软件公司欲开发一个数据格式转换工具,可以将不同数据源如txt文件、数据库、Excel表格中的数据转换成XML格式。为了让系统具有更好的扩展性,在未来支持新类型的数据源,开发人员使用工厂方法模式设计该转换工具的核心类。在工厂类中封装了具体转换类的初始化和创建过程,客户端只需使用工厂类即可获得具体的转换类对象,再调用其相应方法实现数据转换操作。其类图如图1所示:图1 类图在图1中,Convertor
5、Creator是抽象工厂接口,它声明了工厂方法getConvertor(),在其子类中实现该方法,用于创建具体的转换对象;Convertor是抽象产品接口,它声明了抽象数据转换方法transform(),在其子类中实现该方法,用于完成具体的数据转换操作。类DBConvertor和TXTConvertor分别用于将数据库中的数据和txt文件中的数据转换为XML格式。【Java代码】interface ConvertorCreator (1) ;interface Convertor public String transform();class DBConvertorCreator implem
6、ents ConvertorCreator public Convertor getConvertor() (2) ; class TXTConvertorCreator implements ConvertorCreator public Convertor getConvertor() (3) ; class DBConvertor implements Convertor public String transform() /实现代码省略 class TXTConvertor implements Convertor public String transform() /实现代码省略 c
7、lass Test public static void main(String args) ConvertorCreator creator; (4) ; creator = new DBConvertorCreator(); convertor = (5) ; convertor.transform(); 如果需要针对一种新的数据源进行数据转换,该系统至少需要增加 (6) 个类。工厂方法模式体现了以下哪些面向对象设计原则? (7) 。(多选)A. 开闭原则 B. 依赖倒转原则 C. 接口隔离原则 D. 单一职责原则 E. 合成复用原则3. 某手机游戏软件公司欲推出一款新的游戏软件,该软件能
8、够支持Symbian、Android和Windows Mobile等多个主流的手机操作系统平台,针对不同的手机操作系统,该游戏软件提供了不同的游戏操作控制类和游戏界面控制类,并提供相应的工厂类来封装这些类的初始化。软件要求具有较好的扩展性以支持新的操作系统平台,为了满足上述需求,采用抽象工厂模式进行设计所得类图如图1所示:图1 类图 在该设计方案中,具体工厂类如SymbianFactory用于创建Symbian操作系统平台下的游戏操作控制类SymbianOperationController和游戏界面控制类SymbianInterfaceController,再通过它们的业务方法来实现对游戏软
9、件的初始化和运行控制。【Java代码】interface AbstractFactory public OperationController getOperationController(); public InterfaceController getInterfaceController();interface OperationController public void init(); /其他方法声明省略interface InterfaceController public void init(); /其他方法声明省略class SymbianFactory implements
10、AbstractFactory public OperationController getOperationController() (1) ; public InterfaceController getInterfaceController() (2) ; class AndroidFactory (3) public OperationController getOperationController() return new AndroidOperationController(); public InterfaceController getInterfaceController(
11、) return new AndroidInterfaceController(); class SymbianOperationController (4) public void init() /实现代码省略 /其他方法声明省略class AndroidOperationController (5) public void init() /实现代码省略 /其他方法声明省略class SymbianInterfaceController implements InterfaceController public void init() /实现代码省略 /其他方法声明省略class Andro
12、idInterfaceController implements InterfaceController public void init() /实现代码省略 /其他方法声明省略class Test public static void main(String args) AbstractFactory af; (6) oc; (7) ic; af = new SymbianFactory(); oc = (8) ; ic = (9) ; oc.init(); ic.init(); 如何需要在上述设计方案中增加对Windows Mobile操作系统的支持,需对该设计方案进行哪些调整,简单说明实
13、现过程。4. 某软件公司欲开发一个音频和视频播放软件,为了给用户使用提供方便,该播放软件提供了多种界面显示模式,如完整模式、精简模式、记忆模式、网络模式等。在不同的显示模式下主界面的组成元素有所差异,如在完整模式下将显示菜单、播放列表、主窗口、控制条等,在精简模式下只显示主窗口和控制条,而在记忆模式下将显示主窗口、控制条、收藏列表等。现使用建造者模式设计该软件,所得类图如图1所示:图1 类图在该设计方案中,MainScreen是播放器的主界面,它是一个复合对象,包括菜单、播放列表、主窗口和控制条等成员。ModeBuilder是一个抽象类,定义了一组抽象方法buildXXX()用于逐步构造一个完
14、整的MainScreen对象,getScreen()是工厂方法,用于返回一个构造好的MainScreen对象。ScreenModeController充当指挥者,用于指导复合对象的创建,其中construct()方法封装了具体创建流程,并向客户类返回完整的产品对象。【Java代码】class MainScreen public String menu; public String playList; public String mainWindow; public String controlBar; (1) class ModeBuilder protected MainScreen screen = new MainScreen(); public abstract void buildMenu(); public abstract void buildPlayList(); public abstract void buildMainWin
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1