《南华大学软件设计模式实验.doc》由会员分享,可在线阅读,更多相关《南华大学软件设计模式实验.doc(49页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-date南华大学软件设计模式实验南华大学软件设计模式实验南华大学计算机科学与技术学院软件体系结构与设计模式作业 ( 2016秋季学期)学 号: 20144350101 班 级: 软件工程1班 姓 名: 刘让洲 任课老师: 蒋良卫 作业内容: 创建型设计模式 日期: 2016 年 11 月 6 日1 简单工厂模式1.1 作业题目使用简单工厂模式模拟女娲(Nvwa)造人(Pers
2、on),如果传入参数M,则返回一个Man对象,如果传入参数W。则返回一个对象Woman,用java语言实现该场景。现在需要增加一个新的Robot类,如果传入参数R,则返回一个Robot对象,对代码进行修改并注意女娲的变化。(1)绘制简单工厂模式结构视图;(2)请绘制该实例类图,并代码实现。1.2 所用模式结构视图1.3 实例类图1.4 实例实现代码公共类:lrz0101Personpackage com.bluesky;public class lrz0101Person public void play() System.out.println(我还是一坨泥巴,女娲还没有构造我!); 简单工
3、厂类:lrz0101NvWapackage com.bluesky;public class lrz0101NvWa public lrz0101Person madeMan(String s) lrz0101Person person = null; switch(s) case M: person = new lrz0101Man(); break; case W: person = new lrz0101Woman(); break; case R: person = new lrz0101Robot(); break; default: System.out.println(Sorry
4、,女娲暂时没有造这种人的能力); person=new lrz0101Person(); return person; 子类1:lrz0101Manpackage com.bluesky;public class lrz0101Man extends lrz0101Person public void play() System.out.println(大家好,我是男人!我来自地球!); 子类2:lrz0101Womanpackage com.bluesky;public class lrz0101Woman extends lrz0101Person public void play() S
5、ystem.out.println(大家好,我是女人!我来自水星!); 子类2:lrz0101Robotpackage com.bluesky;public class lrz0101Robot extends lrz0101Person public void play() System.out.println(大家好,我是机器人!我来未知星球!); 1.5 运行结果-2 工厂模式2.1 作业题目现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器ImgReader,如gif图片读取器GifReader用于读取gif格式的图片,jpg图片读取器JPGRead
6、er用于读取jpg格式的图片。图片读取器对象通过图片读取器工厂ImgReaderFactory来创建。ImgReaderFactory是一个抽象类,用于定义创建图片读取器的工厂方法,其GifReaderFactory和JPGReaderFactory用于创建具体的图片读取器对象。使用工厂方法模式,实现该程序的设计。 (1) 绘制工厂模式结构视图(2) 给出实例类图并实现代码。2.2 所用模式结构视图2.3 实例类图2.4 实例实现代码图片读取工厂类:lrz0101ImageReaderFactory package com.bluesky1;public class lrz0101ImageR
7、eaderFactory public lrz0101ImageReaderFactory productReaderFactory(String s) lrz0101ImageReaderFactory reader =null; if(s.equals(JPG) reader = new lrz0101JpgReaderFactory(); else if(s.equals(GIF) reader = new lrz0101GifReaderFactory(); else reader =new lrz0101ImageReaderFactory(); return reader; Jpg
8、图片读取工厂类:lrz0101JpgReaderFactorypackage com.bluesky1;public class lrz0101JpgReaderFactory extends lrz0101ImageReaderFactorypublic lrz0101ImageReader productImageReader() lrz0101ImageReader iread = new lrz0101GifReader(); return iread; Gif图片读取工厂类:lrz0101JpgReaderFactorypackage com.bluesky1;public clas
9、s lrz0101GifReaderFactory extends lrz0101ImageReaderFactory public lrz0101ImageReader productImageReader() lrz0101ImageReader iread = new lrz0101GifReader(); return iread; 图片读取器类:lrz0101ImageReaderpackage com.bluesky1;public class lrz0101ImageReader public void readImage() Jpg图片读取器类:lrz0101JpgReader
10、 package com.bluesky1;public class lrz0101JpgReader extends lrz0101ImageReaderpublic lrz0101ImageReader productImageReader() lrz0101ImageReader iread = new lrz0101JpgReader(); return iread; Gif图片读取器类:lrz0101GifReader package com.bluesky1;public class lrz0101GifReader extends lrz0101ImageReader publi
11、c void readImage() System.out.println(Read GIF Image); 测试类:Testpackage com.bluesky1;public class lrz0101Test public static void main(String args) lrz0101Test test = new lrz0101Test();lrz0101ImageReaderFactory irf = new lrz0101ImageReaderFactory();lrz0101ImageReaderFactory ir=irf.productReaderFactory
12、(JPG);lrz0101ImageReaderFactory ir1=irf.productReaderFactory(GIF);lrz0101ImageReaderFactory ir2=irf.productReaderFactory(PNG);piti(ir);piti(ir1);piti(ir2);public static void compiti(lrz0101ImageReaderFactory ir)if(ir instanceof lrz0101JpgReaderFactory )ir=(lrz0101JpgReaderFactory)ir;lrz0101ImageRead
13、er ireader=(lrz0101JpgReaderFactory) ir).productImageReader();ireader.readImage();else if(ir instanceof lrz0101GifReaderFactory ) ir=(lrz0101GifReaderFactory)ir;lrz0101ImageReader ireader=(lrz0101GifReaderFactory) ir).productImageReader();ireader.readImage();elseSystem.out.println(无法读取该类型的图片格式);2.5
14、运行结果 3 抽象工厂模式3.1 作业题目某软件公司要推出一款新的手机游戏软件,该软件支持IOS、Android和Windows Phone等多个智能手机操作系统平台,针对不同的手机操作系统,该游戏软件提供了不同的游戏操作控制类(OperatioinController)游戏界面控制类(InterfaceController),并提供的相应的工厂类来封装这些类的初始化过程。该软件要求具有较好的扩展性,以支持新的操作系统平台,为了满足上述要求,试采用抽象工厂模式对其进行设计。(1)绘制抽象工厂模式结构视图;(2)请绘制该实例类图,并代码实现。3.2 所用模式结构视图3.3 实例类图3.4 实例实
15、现代码操作系统父类:lrz0101OperatingSystempackage com.bluesky4;public class lrz0101OperatingSystem public lrz0101GameController gc;public lrz0101GameUiController guic;public lrz0101GameController getGameCtroller()return gc;public lrz0101GameUiController getGameUiController()return guic;游戏控制父类:lrz0101GameContr
16、ollerpackage com.bluesky4;public class lrz0101GameController public void play() System.out.println(游戏控制加载中。); 游戏界面控制父类:lrz0101GameUiControllerpackage com.bluesky4;public class lrz0101GameUiController public void showUI() System.out.println(界面加载中。); IOS工厂类:lrz0101IosSystem package com.bluesky4;public
17、 class lrz0101IosSystem extends lrz0101OperatingSystempublic lrz0101GameController getGameCtroller() this.gc=new lrz0101IosGameController();return this.gc;public lrz0101GameUiController getGameUiController()this.guic=new lrz0101IosUiController();return this.guic;Android工厂类:lrz0101AndroidSystempackag
18、e com.bluesky4;public class lrz0101AndroidSystem extends lrz0101OperatingSystempublic lrz0101GameController getGameCtroller()this.gc=new lrz0101AndroidGameControlller();return this.gc;public lrz0101GameUiController getGameUiController()this.guic=new lrz0101AndroidUiController();return this.guic;Wind
19、ows工厂类:lrz0101WindowsSystem package com.bluesky4;public class lrz0101WindowsSystem extends lrz0101OperatingSystempublic lrz0101GameController getGameCtroller()this.gc=new lrz0101WindowsGameController();return this.gc;public lrz0101GameUiController getGameUiController()this.guic=new lrz0101WindoswUiC
20、ontroller();return this.guic;IOS游戏控制类: lrz0101IosGameController package com.bluesky4;public class lrz0101IosGameController extends lrz0101GameControllerpublic void play()System.out.println(IOS游戏控制加载中.);IOS游戏界面控制类:lrz0101IosUiControllerpackage com.bluesky4;public class lrz0101IosUiController extends
21、lrz0101GameUiControllerpublic void showUI()System.out.println(IOS游戏界面加载中.);public void p()System.out.println(Hello);Android游戏控制类:lrz0101AndroidGameControlllerpackage com.bluesky4;public class lrz0101AndroidGameControlller extends lrz0101GameControllerpublic void play()System.out.println(Android游戏控制加
22、载中.);Android游戏界面控制类:lrz0101AndroidGameControlllerpackage com.bluesky4;public class lrz0101AndroidUiController extends lrz0101GameUiControllerpublic void showUI() System.out.println(Android游戏界面加载中.); Windows游戏控制类:lrz0101WindowsGameController package com.bluesky4;public class lrz0101WindowsGameControl
23、ler extends lrz0101GameControllerpublic void play()System.out.println(Windows游戏控制加载中.);Windows游戏界面控制类:lrz0101WindoswUiControllerpackage com.bluesky4;public class lrz0101WindoswUiController extends lrz0101GameUiController public void showUI()System.out.println(Windows游戏界面加载中.);测试类:lrz0101Testpackage
24、com.bluesky4;public class lrz0101Test public static void main(String args) lrz0101Test test= new lrz0101Test();lrz0101OperatingSystem ios = new lrz0101IosSystem();lrz0101OperatingSystem android = new lrz0101AndroidSystem();lrz0101OperatingSystem windows = new lrz0101WindowsSystem();test.show(ios);Sy
25、stem.out.println();test.show(android);System.out.println();test.show(windows);public static void show(lrz0101OperatingSystem ios)lrz0101OperatingSystem os; lrz0101GameController iosgc;lrz0101GameUiController iosuic;iosgc=ios.getGameCtroller();iosuic=ios.getGameUiController();iosgc.play();iosuic.show
26、UI();3.5 运行结果4 建造者模式4.1作业题目 某软件公司要开发一个视频播放软件,为了给用户提供方便,该播放软件提供了多种界面显示模式,如完整模式、精简模式、记忆模式、网络模式等。在不同的显示模式下,主界面的组成元素有所差异,如在完整模式下将显示菜单、播放列表、主窗口、控制条等,在精简模式下只显示主窗口和控制条,而在记忆模式下,将显示主窗口、控制条、收藏列表等。试用建造者模式设计软件。(1) 给出建造者模式等结构视图(2)给出该实例等类图及代码实现4.2 所用模式结构视图4.3 实例类图4.4 实例实现代码主窗口类:lrz0101MainScreenpackage com.bluesk
27、y3;public class lrz0101MainScreen public String menu; public String playList; public String mainWindow; public String controlBar;模式建造类:lrz0101ModelBulider package com.bluesky3; public class lrz0101ModelBulider protected lrz0101MainScreen screen = new lrz0101MainScreen();public void buildMenu()public
28、 void buildPlayList() public void buildMainWindow() public void buildControlBar() public lrz0101MainScreen getScreen() return screen; 模式控制类:lrz0101ModelControllerpackage com.bluesky3;public class lrz0101ModelController private lrz0101ModelBulider mb; public void setModeBuilder(lrz0101ModelBulider mb
29、 ) this.mb = mb; public lrz0101MainScreen construct() mb.buildControlBar(); mb.buildMainWindow(); mb.buildPlayList(); mb.buildMenu(); mb.getScreen() ; return mb.getScreen(); 完整显示类:lrz0101FullStylepackage com.bluesky3;public class lrz0101FullStyle extends lrz0101ModelBuliderpublic void buildMenu() sc
30、reen.menu=菜单栏显示;public void buildPlayList() screen.playList=播放列表显示;public void buildMainWindow() screen.mainWindow=主窗口显示;public void buildControlBar() screen.controlBar=控制条显示;简单模式类:lrz0101SimpleStylepackage com.bluesky3;public class lrz0101SimpleStyle extends lrz0101ModelBulider public void buildMen
31、u() screen.menu=菜单栏不显示;public void buildPlayList() screen.playList=播放列表不显示;public void buildMainWindow() screen.mainWindow=主窗口显示;public void buildControlBar() screen.controlBar=控制条显示;记忆模式类:lrz0101MemotyStylepackage com.bluesky3;public class lrz0101MemotyStyle extends lrz0101ModelBulider public void
32、buildMenu() screen.menu=菜单栏不显示;public void buildPlayList() screen.playList=播放列表显示;public void buildMainWindow() screen.mainWindow=主窗口显示;public void buildControlBar() screen.controlBar=控制条显示;网络模式类:lrz0101InternetStylepackage com.bluesky3;public class lrz0101InternetStyle extends lrz0101ModelBuliderpu
33、blic void buildMenu() screen.menu=菜单栏显示;public void buildPlayList() screen.playList=播放列表不显示;public void buildMainWindow() screen.mainWindow=主窗口显示;public void buildControlBar() screen.controlBar=控制条显示;测试类:lrz0101Testpackage com.bluesky3;public class lrz0101Test public static void main(String args) lr
34、z0101Test test = new lrz0101Test();lrz0101ModelController smc = new lrz0101ModelController() ; lrz0101ModelBulider mb= new lrz0101FullStyle(); /构造完整模式界面 lrz0101ModelBulider mb1= new lrz0101SimpleStyle();/构造简单模式lrz0101ModelBulider mb2= new lrz0101MemotyStyle();/构造记忆模式lrz0101ModelBulider mb3= new lrz0
35、101InternetStyle();/构造网络模式lrz0101MainScreen screen; smc.setModeBuilder(mb); screen = smc.construct() ; System.out.println(完整模式:); test.display(screen); System.out.println(); smc.setModeBuilder(mb1); screen = smc.construct() ; System.out.println(简单模式:); test.display(screen); System.out.println(); smc
36、.setModeBuilder(mb2); screen = smc.construct() ; System.out.println(记忆模式:); test.display(screen); System.out.println(); smc.setModeBuilder(mb3); screen = smc.construct() ; System.out.println(网络模式:); test.display(screen); public static void display(lrz0101MainScreen screen) System.out.println(screen.
37、menu); System.out.println(screen.playList); System.out.println(screen.mainWindow); System.out.println(screen.controlBar); 4.5 运行结果5 原型模式5.1 作业题目某数据处理软件需要增加一个图表复制功能。在图表对象(DataChart)中包含一个数据集对象(DataSet)。数据集对象用于封装要显示的数据,用户可以通过界面上的复制按钮将该图表复制一份,复制后,即可得到新的图表对象,然后可以修改新图表的编号、颜色、数据。试用原型模式设计软件实现深克隆。(1) 给出原型模式等
38、结构视图(2) 给出该实例等类图及代码实现5.2 所用模式结构视图5.3 实例类图5.4 实例实现代码 颜色类:lrz0101Colorpackage com.bluesky2;public class lrz0101Color public String color;public lrz0101Color(String color)this.color=color; 自我克隆类 :lrz0101Datachatpackage com.bluesky2;public class lrz0101Datachat public lrz0101Dataset dataset;public void
39、deepClone(lrz0101Dataset dataset)dataset.no=this.dataset.no;dataset.color=this.dataset.color;dataset.data=this.dataset.data; 自我克隆需要新创建的类 :lrz0101Datasetpackage com.bluesky2;public class lrz0101Dataset public lrz0101Color color;public int no;public String data;public lrz0101Dataset()public lrz0101Dat
40、aset(lrz0101Color color,int no,String data)this.color=color;this.no=no;this.data=data;public void getColor()System.out.println(Color:+this.color.colorpublic void getNo()System.out.println(No:+this.no);public void getData()System.out.println(Data:+this.data);public void setColor(lrz0101Color color)this.color=color;public void setNo(int no)this.no=no;public void setData(String data)this.data=data;public void dispaly() System.out.println(当前图表对象的属性:);this.getNo();this.getColor();this.getData();测试类:lrz0101Testpackage com.bluesky2;