ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:261.14KB ,
资源ID:7462729      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7462729.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第3章 创建型模式实训.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、第3章 创建型模式实训第3章 创建型模式实训3.3 实训练习3.3.2 填空题1. 某系统提供一个简单计算器,具有简单的加法和减法功能,系统可以根据用户的选择实例化相应的操作类。现使用简单工厂模式设计该系统,类图如图1所示:图1 类图在图1中,Operation是抽象类,其中定义了抽象方法getResult(),其子类AddOperation用于实现加法操作,SubOperation用于实现减法操作,Calculator是简单工厂类,工厂方法为createOperation(),该方法接收一个char类型的字符参数,如果传入的参数为“+”,工厂方法返回一个AddOperation类型的对象,如

2、果传入的参数为“-”,则返回一个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 extends Operation

3、 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.createOperation(+); o

4、p1.setNumberA(20); op1.setNumberB(10); result = (7) ; System.out.println(result); 2. 某软件公司欲开发一个数据格式转换工具,可以将不同数据源如txt文件、数据库、Excel表格中的数据转换成XML格式。为了让系统具有更好的扩展性,在未来支持新类型的数据源,开发人员使用工厂方法模式设计该转换工具的核心类。在工厂类中封装了具体转换类的初始化和创建过程,客户端只需使用工厂类即可获得具体的转换类对象,再调用其相应方法实现数据转换操作。其类图如图1所示:图1 类图在图1中,ConvertorCreator是抽象工厂接口,

5、它声明了工厂方法getConvertor(),在其子类中实现该方法,用于创建具体的转换对象;Convertor是抽象产品接口,它声明了抽象数据转换方法transform(),在其子类中实现该方法,用于完成具体的数据转换操作。类DBConvertor和TXTConvertor分别用于将数据库中的数据和txt文件中的数据转换为XML格式。【Java代码】interface ConvertorCreator (1) ;interface Convertor public String transform();class DBConvertorCreator implements ConvertorC

6、reator 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() /实现代码省略 class Test publi

7、c static void main(String args) ConvertorCreator creator; (4) ; creator = new DBConvertorCreator(); convertor = (5) ; convertor.transform(); 如果需要针对一种新的数据源进行数据转换,该系统至少需要增加 (6) 个类。工厂方法模式体现了以下哪些面向对象设计原则? (7) 。(多选)A. 开闭原则 B. 依赖倒转原则 C. 接口隔离原则 D. 单一职责原则 E. 合成复用原则3. 某手机游戏软件公司欲推出一款新的游戏软件,该软件能够支持Symbian、Andr

8、oid和Windows Mobile等多个主流的手机操作系统平台,针对不同的手机操作系统,该游戏软件提供了不同的游戏操作控制类和游戏界面控制类,并提供相应的工厂类来封装这些类的初始化。软件要求具有较好的扩展性以支持新的操作系统平台,为了满足上述需求,采用抽象工厂模式进行设计所得类图如图1所示:图1 类图 在该设计方案中,具体工厂类如SymbianFactory用于创建Symbian操作系统平台下的游戏操作控制类SymbianOperationController和游戏界面控制类SymbianInterfaceController,再通过它们的业务方法来实现对游戏软件的初始化和运行控制。【Jav

9、a代码】interface AbstractFactory public OperationController getOperationController(); public InterfaceController getInterfaceController();interface OperationController public void init(); /其他方法声明省略interface InterfaceController public void init(); /其他方法声明省略class SymbianFactory implements AbstractFactory

10、 public OperationController getOperationController() (1) ; public InterfaceController getInterfaceController() (2) ; class AndroidFactory (3) public OperationController getOperationController() return new AndroidOperationController(); public InterfaceController getInterfaceController() return new An

11、droidInterfaceController(); class SymbianOperationController (4) public void init() /实现代码省略 /其他方法声明省略class AndroidOperationController (5) public void init() /实现代码省略 /其他方法声明省略class SymbianInterfaceController implements InterfaceController public void init() /实现代码省略 /其他方法声明省略class AndroidInterfaceCont

12、roller 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操作系统的支持,需对该设计方案进行哪些调整,简单说明实现过程。4. 某软件公司欲开发

13、一个音频和视频播放软件,为了给用户使用提供方便,该播放软件提供了多种界面显示模式,如完整模式、精简模式、记忆模式、网络模式等。在不同的显示模式下主界面的组成元素有所差异,如在完整模式下将显示菜单、播放列表、主窗口、控制条等,在精简模式下只显示主窗口和控制条,而在记忆模式下将显示主窗口、控制条、收藏列表等。现使用建造者模式设计该软件,所得类图如图1所示:图1 类图在该设计方案中,MainScreen是播放器的主界面,它是一个复合对象,包括菜单、播放列表、主窗口和控制条等成员。ModeBuilder是一个抽象类,定义了一组抽象方法buildXXX()用于逐步构造一个完整的MainScreen对象,

14、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 MainS

15、creen(); public abstract void buildMenu(); public abstract void buildPlayList(); public abstract void buildMainWindow(); public abstract void buildControlBar(); public MainScreen getScreen() (2) ; class FullModeBuilder extends ModeBuilder public void buildMenu() /实现代码省略 public void buildPlayList() /

16、实现代码省略 public void buildMainWindow() /实现代码省略 public void buildControlBar() /实现代码省略 class SimpleModeBuilder extends ModeBuilder public void buildMenu() /实现代码省略 public void buildPlayList() /实现代码省略 public void buildMainWindow() /实现代码省略 public void buildControlBar() /实现代码省略 class ScreenModeController pr

17、ivate ModeBuilder mb; public void setModeBuilder( (3) ) this.mb = mb; public MainScreen construct() MainScreen ms; mb.buildMenu(); mb.buildPlayList(); mb.buildMainWindow(); mb.buildControlBar(); ms= (4) ; return ms; class Test public static void main(String args) ScreenModeController smc = (5) ; Mod

18、eBuilder mb; mb = new FullModeBuilder(); /构造完整模式界面 MainScreen screen; smc.setModeBuilder( (6) ); screen = (7) ; System.out.println(screen.menu); /其他代码省略 5. 某数据处理软件需要增加一个图表复制功能,在图表对象中包含一个数据集对象,用于封装待显示的数据,可以通过界面的“复制”按钮将该图表复制一份,复制后可以得到新的图表对象,用户可以修改新图表的编号、颜色和数据。现使用原型模式设计该软件,所得类图如图1所示:图1 类图在该设计方案中,DataCh

19、art类包含一个DataSet对象,在复制DataChart对象的同时将复制DataSet对象,因此需要使用深克隆技术,可使用流来实现深克隆。【Java代码】import java.io.*;class DataSet implements Serializable /具体实现代码省略 class Color implements Serializable /具体实现代码省略 class DataChart implements Serializable private DataSet ds = new DataSet(); private Color color = new Color();

20、 private int no; /成员属性的Getter方法和Setter方法省略 public void display() /具体实现代码省略 /使用流实现深克隆,复制容器的同时复制成员 public (1) deepClone() throws IOException, ClassNotFoundException, OptionalDataException /将对象写入流中 ByteArrayOutputStream bao=new ByteArrayOutputStream(); ObjectOutputStream oos=new (2) ; oos.writeObject(

21、(3) ); /将对象从流中取出 ByteArrayInputStream bis=new ByteArrayInputStream(bao.toByteArray(); ObjectInputStream ois=new (4) ; return( (5) ); class Test public static void main(String args) DataChart chart1,chart2 = null; chart1 = new DataChart(); try chart2 = (DataChart)chart1.deepClone(); catch(Exception e

22、) 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. 为了避免监控数据显示不一致并节省系统资源,在某监控系统的设计方案中提供了一个主控中心类,该主控中心类使用

23、单例模式进行设计,类图如图1所示:图1 类图在图1中,主控中心类MainControllerCenter是单例类,它包含一系列成员对象并可以初始化、显示和销毁成员对象,对应的方法分别为init()、load()和destroy(),此外还提供了静态工厂方法getInstance()用于创建MainControllerCenter类型的单例对象。【Java代码】class MainControllerCenter private Menu menu; /主控中心菜单 private ToolBar tb; /主控中心工具栏 private MainForm mf; /主控中心主窗口 privat

24、e (1) MainControllerCenter mcc; (2) MainControllerCenter public void init() menu = new Menu(); tb = new ToolBar(); mf = new MainForm(); public void load() menu.display();tb.display(); mf.display(); public void destroy() menu.destroy(); tb.destroy(); mf.destroy(); public static MainControllerCenter g

25、etInstance() if(mcc=null) (3) ; return mcc; class Test public static void main(String args) MainControllerCenter mcc1,mcc2; mcc1 = MainControllerCenter.getInstance(); mcc2 = MainControllerCenter.getInstance(); System.out.println(mcc1=mcc2); /其他代码省略 编译并运行上述代码,输出结果为 (4) 。 在本实例中,使用了 (5) (填写懒汉式或饿汉式)单例模式

26、,其主要优点是 (6) ,主要缺点是 (7) 。3.3.3 综合题1. 使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数“M”,则返回一个Man对象,如果传入参数“W”,则返回一个Woman对象,用Java语言实现该场景。现需要增加一个新的Robot类,如果传入参数“R”,则返回一个Robot对象,对代码进行修改并注意“女娲”的变化。2. 现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReader),如GIF图片读取器(GifReader)用于读取GIF格式的图片、JPG图片读取器(JpgReader)用于读取JPG格式

27、的图片。图片读取器对象通过图片读取器工厂ImageReaderFactory来创建,ImageReaderFactory是一个抽象类,用于定义创建图片读取器的工厂方法,其子类GifReaderFactory和JpgReaderFactory用于创建具体的图片读取器对象。使用工厂方法模式实现该程序的设计。3. 计算机包含内存(RAM)、CPU等硬件设备,根据下面的“产品等级结构-产品族”示意图,使用抽象工厂模式实现计算机设备创建过程并绘制相应的类图。 4. 电脑组装工厂可以将CPU、内存、硬盘、主机、显示器等硬件设备组装在一起构成一台完整的电脑,且构成的电脑可以是笔记本,也可以是台式机,还可以是不提供显示器的服务器主机。对于用户而言,无须关心电脑的组成设备和组装过程,工厂返回给用户的是完整的电脑对象。使用建造者模式实现电脑组装过程,要求绘制类图并编程实现。5. 设计一个客户类Customer,其中客户地址存储在地址类Address中,用浅克隆和深克隆分别实现Customer对象的复制并比较这两种克隆方式的异同。绘制类图并编程实现。6. 使用单例模式的思想实现多例模式,确保系统中某个类的对象只能存在有限个,如两个或三个,设计并编写代码实现一个多例类。

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

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