第3章创建型模式实训_第1页
第3章创建型模式实训_第2页
第3章创建型模式实训_第3页
第3章创建型模式实训_第4页
第3章创建型模式实训_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、入的参数为-”,则返回一个SubOperation类型的对象。【Java代码】abstract class Operati onprotected int nu mberA;protected int nu mberB;/ numberA和numberB的Setter方法和Getter方法省略public (1) i nt getResult();class AddOperati on exte nds Operati onpublic int getResult()retur n nu mberA + nu mberB;精选文档,供参考!class SubOperati on exte nd

3、s Operati onpublic int getResult()retur n nu mberA - nu mberB;class Calculatorpublic _ (2)_ createOperation(char operator)Operati on op = n ull;case +:op =(4);break;case -:op =(5):break; :class Testpublic static void main(String args)int result;Operati on op1 = Calculator.createOperati on (+);op1.se

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

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

6、on vertorCreatorpublic Con vertor getC on vertor()(2)-;class TXTC on vertorCreator impleme nts Con vertorCreatorpublic Con vertor getC on vertor()(3)-;class DBCon vertor impleme nts Con vertorCon vertorCreatorConvertor+ getC on vertor ()+ tran sform ()DBConvertorCreatorTXTCo nvertorCreator+ getC on

7、vertor ()+ getC on vertor ()TXTCo nvertor+ tran sform ()精选文档,供参考!public String tran sform()精选文档,供参考!/实现代码省略class TXTC on vertor impleme nts Con vertorpublic String tran sform()/实现代码省略class Testpublic static void main(String args)Con vertorCreator creator;(4);creator = new DBC on vertorCreator();con

8、vertor = _ (5)_ ;con vertor.tra nsform();_如果需要针对一种新的数据源进行数据转换,该系统至少需要增加(6)个类。工厂方法模式体现了以下哪些面向对象设计原则? _(7)_。(多选)A.开闭原则B.依赖倒转原则C.接口隔离原则D.单一职责原则E.合成复用原则3.某手机游戏软件公司欲推出一款新的游戏软件,该软件能够支持Symbian、An droid和Win dowsMobile等多个主流的手机操作系统平台,针对不同的手机操作系统,该游戏软件提供了不同的游戏操作控 制类和游戏界面控制类,并提供相应的工厂类来封装这些类的初始化。软件要求具有较好的扩展性以支持新

9、的操作系统平台,为了满足上述需求,采用抽象工厂模式进行设计所得类图如图Operati onCon troller1所示:AbstractFactory精选文档,供参考!+ getOperatio nCon troller () + get In terfaceC on troller ()图1类图在该设计方案中,具体工厂类如SymbianFactory用于创建Symbian操作系统平台下的游戏操作控制类SymbianOperationController和游戏界面控制类SymbianlnterfaceController,再通过它们的业务方法来实现对 游戏软件的初始化和运行控制。【Java代码

10、】in terface AbstractFactorypublic Operati onCon troller getOperati onCon troller();public In terfaceC on troller get In terfaceC on troller();in terface Operati onCon trollerpublic void in it();其他方法声明省略in terface In terfaceC on trollerpublic void in it();其他方法声明省略class Symbia nF actory impleme nts Ab

11、stractFactorypublic Operati onCon troller getOperati onCon troller()(1;public In terfaceC on troller get In terfaceC on troller()75Symbia nFactory+ getOperatio nCon troller ()+ getl nterfaceC on troller ()Symbia nO perati onCon trollerAn droidOperati onCon trollerAn droidlnterfaceCAn droidFactoryIn

12、terfaceC ontrollerSymbia nln terfaceC ontroller+ getOperatio nCon troller ()+ get In terfaceC on troller ()精选文档,供参考!(2);class AndroidFactory _ (3)_public Operati onCon troller getOperati onCon troller()return new An droidOperati onCon troller();public In terfaceC on troller get In terfaceC on trolle

13、r()return new An droidlnterfaceController();class Symbia nOperati onCon troller(4)public void in it() 实现代码省略其他方法声明省略class An droidOperati onCon troller(5)public void in it() 实现代码省略其他方法声明省略class Symbia nln terfaceC on troller impleme nts In terfaceC on troller public void in it() 实现代码省略其他方法声明省略class

14、An droidI nterfaceC on troller impleme nts In terfaceC on trollerpublic void in it() 实现代码省略其他方法声明省略精选文档,供参考!class Testpublic static void main(String args)AbstractFactory af;- (6)oc;-Caf = new Symbia nF actory();oc = -(8);ic = -(9);oc.i nit();精选文档,供参考!ic.ini t();_如何需要在上述设计方案中增加对Windows Mobile操作系统的支持,

15、需对该设计方案进行哪些调整,简单说明实现过程。4.某软件公司欲开发一个音频和视频播放软件,为了给用户使用提供方便,该播放软件提供了多种界 面显示模式,如完整模式、精简模式、记忆模式、网络模式等。在不同的显示模式下主界面的组成元素有 所差异,如在完整模式下将显示菜单、播放列表、主窗口、控制条等,在精简模式下只显示主窗口和控制 条,而在记忆模式下将显示主窗口、控制条、收藏列表等。现使用建造者模式设计该软件,所得类图如图 所示:MainScreen+ menu+ playList+ mainWindow+ controlBarModeBuilder图1类图在该设计方案中,Main Scree n是播

16、放器的主界面,它是一个复合对象,包括菜单、播放列表、主窗口 和控制条等成员。ModeBuilder是一个抽象类,定义了一组抽象方法buildXXX()用于逐步构造一个完整的MainScreen对象,getScreen()是工厂方法,用于返回一个构造好的MainScreen对象。ScreenModeController充当指挥者,用于指导复合对象的创建,其中con struct()方法封装了具体创建流程,并向客户类返回完整的产品对象。【Java代码】class Main Scree npublic String menu;public String playList;public String

17、mainWin dow; public String controlBar;_(1)_class ModeBuilderprotected Main Scree n scree n = new Main Scree n();public abstract void buildMe nu ();public abstract void buildPlayList。;public abstract void buildMa inWin dow();public abstract void buildC on trolBar();ScreenModeController-mb : ModeBuild

18、er+ setModeBuilder (ModeBuilder mb):void+ construct ():MainScreenabstract# screen : MainScreen = new MainScreen()+ buildMenu ()+ buildPlayList ()+ buildMainWindow ()+ buildControlBar ()+ getScreen ():void:void:void:void:MainScreenFullModeBuilderSimpleModeBuilder+ buildMenu ():void+ buildPlayList ():

19、void+ buildMainWindow ():+buildMenu ():void+buildPlayList ():void+buildMainWindow (): void+buildControlBar():voidmb严mb.buildMe nu();mb.buildPlayList();mb.buildMai nWindow(); mb.buildC ontrolBar(); returnmb.getScree n();精选文档,供参考!public Main Scree n getScree n() (2) ; class FullModeBuilder exte nds Mo

20、deBuilderpublic void buildMe nu() /实现代码省略public void buildPlayList() /实现代码省略public void buildMai nWin dow() /实现代码省略 public void buildC on trolBar() /实现代码省略class SimpleModeBuilder exte nds ModeBuilderpublic void buildMe nu() /实现代码省略public void buildPlayList() /实现代码省略public void buildMai nWin dow() /实

21、现代码省略 public void buildC on trolBar() /实现代码省略class Scree nM odeC on trollerprivate ModeBuilder mb;public void setModeBuilder(3)this.mb = mb;public Main Scree n con struct()Main Scree n ms;mb.buildMe nu();mb.buildPlayList();mb.buildMai nWin dow(); mb.buildCo ntrolBar();ms=_ (4)_;return ms;class Testp

22、ublic static void main(String args)Scree nM odeC on troller smc =(5)精选文档,供参考!ModeBuilder mb;mb = new FullModeBuilder();构造完整模式界面Main Scree n scree n;smc.setModeBuilder(_(6)_ );scree n = _(7)_ ;System.out.pri ntln( scree n.menu);/其他代码省略_5.某数据处理软件需要增加一个图表复制功能,在图表对象中包含一个数据集对象,用于封装待显示 的数据,可以通过界面的“复制”按钮将该

23、图表复制一份,复制后可以得到新的图表对象,用户可以修改 新图表的编号、颜色和数据。现使用原型模式设计该软件,所得类图如图1所示:图1类图在该设计方案中,DataChart类包含一个DataSet对象,在复制DataChart对象的同时将复制象,因此需要使用深克隆技术,可使用流来实现深克隆。【Java代码】import java.io.*;class DataSet impleme nts Serializable具体实现代码省略class Color impleme nts Serializable具体实现代码省略class DataChart impleme nts Serializable

24、private DataSet ds = new DataSet();private Color color = new Color();private int no;成员属性的Getter方法和Setter方法省略DataChart-ds: DataSet-color : Color-no : int+ setDataSet (DataSet ds)void+ setColor (Color color)void+ setNo (int no)void+ getDataSet ()DataSet+ getColor ()Color+ getNo ()int+ display ()void+

25、deepCl one ()ObjectDataSet对精选文档,供参考!public void display。具体实现代码省略/使用流实现深克隆,复制容器的同时复制成员public _ (1_deepCIone() throws lOException,ClassNotFoundException,Opti on alDataExcepti on将对象写入流中ByteArrayOutputStream bao=new ByteArrayOutputStream();ObjectOutputStream oos=new _(2)_ ;oos.writeObject(_ (3)_ );将对象从流

26、中取出ByteArrayl nputStream bis=new ByteArray In putStream(bao.toByteArray();ObjectlnputStream ois=new _ (4)_ ;return(_ (5)_ );class Testpublic static void main(String args)DataChart chart1,chart2 = null;chartl = new DataChart();trychart2 = (DataChart)chartl.deepClo ne();catch(Excepti on e)e.pri ntStac

27、kTrace();System.out.pri ntln( chart1=chart2);System.out.pri ntl n( chart1.getDs()=chart2.getDs();System.out.pri ntl n( chart1.getNo()=chart2.getNo();J_编译并运行上述代码,输出结果为:、(8)。在本实例中,DataChart类和DataSet类需要实现Serializable接口的原因是 _(9)。6.为了避免监控数据显示不一致并节省系统资源,在某监控系统的设计方案中提供了一个主控中心类,该主控中心类使用单例模式进行设计,类图如图1所示:Mai

28、nCon trollerCe ntermenu :Me nutb:ToolBarmf:MainFormmcc:Mai nCon trollerCe nter精选文档,供参考!-MainControllerCenter ()+ini t ():void+load ():void+destroy ():void+getI nsta nee ():Mai nCon trollerCe nter图1类图在图1中,主控中心类MainControllerCenter是单例类,它包含一系列成员对象并可以初始化、显示和销毁成员对象,对应的方法分别为ini t()、load()和destroy。,此外还提供了静

29、态工厂方法get In sta nce()用于创建MainControllerCenter类型的单例对象。【Java代码】class MainCon trollerCe nterprivate Me nu me nu;主控中心菜单private ToolBar tb;/主控中心工具栏private Mai nF orm mf;主控中心主窗口private (1)Ma inCon trollerCe nter mcc;(2)Mai nCon trollerCe nterpublic void in it()menu = new Menu();tb = new ToolBar(); mf = ne

30、w MainForm();public void load()menu .display。;tb.display(); mf.display();public void destroy()menu .destroy。;tb.destroy();mf.destroy();public static MainCon trollerCe nter get In sta nce()if(mcc=n ull)_ (3)_;return mcc;精选文档,供参考!class Testpublic static void main(String args)MainCon trollerCe nter mcc1,mcc2;mcc1 = MainCon trollerCe nter.getl nsta nce();mcc2 = MainCon trollerCe nter.getl nsta nce();System.o

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论