南华大学软件设计模式实验.docx
- 文档编号:9477961
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:27
- 大小:216.25KB
南华大学软件设计模式实验.docx
《南华大学软件设计模式实验.docx》由会员分享,可在线阅读,更多相关《南华大学软件设计模式实验.docx(27页珍藏版)》请在冰豆网上搜索。
南华大学软件设计模式实验
南华大学
计算机科学与技术学院
软件体系结构与设计模式作业
(2016秋季学期)
学号:
20144350101
班级:
软件工程1班
姓名:
刘让洲
任课老师:
蒋良卫
作业内容:
创建型设计模式
日期:
2016年11月6日
1简单工厂模式
1.1作业题目
使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W。
则返回一个对象Woman,用java语言实现该场景。
现在需要增加一个新的Robot类,如果传入参数R,则返回一个Robot对象,对代码进行修改并注意女娲的变化。
(1)绘制简单工厂模式结构视图;
(2)请绘制该实例类图,并代码实现。
1.2所用模式结构视图
1.3实例类图
1.4实例实现代码
公共类:
lrz0101Person
packagecom.bluesky;
publicclasslrz0101Person{
publicvoidplay(){
System.out.println("我还是一坨泥巴,女娲还没有构造我!
");
}
}
简单工厂类:
lrz0101NvWa
packagecom.bluesky;
publicclasslrz0101NvWa{
publiclrz0101PersonmadeMan(Strings){
lrz0101Personperson=null;
switch(s){
case"M":
person=newlrz0101Man();
break;
case"W":
person=newlrz0101Woman();
break;
case"R":
person=newlrz0101Robot();
break;
default:
System.out.println("Sorry,女娲暂时没有造这种人的能力");
person=newlrz0101Person();
}
returnperson;
}
}
子类1:
lrz0101Man
packagecom.bluesky;
publicclasslrz0101Manextendslrz0101Person{
publicvoidplay(){
System.out.println("大家好,我是男人!
我来自地球!
");
}
}
子类2:
lrz0101Woman
packagecom.bluesky;
publicclasslrz0101Womanextendslrz0101Person{
publicvoidplay(){
System.out.println("大家好,我是女人!
我来自水星!
");
}
}
子类2:
lrz0101Robot
packagecom.bluesky;
publicclasslrz0101Robotextendslrz0101Person{
publicvoidplay(){
System.out.println("大家好,我是机器人!
我来未知星球!
");
}
}
1.5运行结果
2工厂模式
2.1作业题目
现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器ImgReader,如gif图片读取器GifReader用于读取gif格式的图片,jpg图片读取器JPGReader用于读取jpg格式的图片。
图片读取器对象通过图片读取器工厂ImgReaderFactory来创建。
ImgReaderFactory是一个抽象类,用于定义创建图片读取器的工厂方法,其GifReaderFactory和JPGReaderFactory用于创建具体的图片读取器对象。
使用工厂方法模式,实现该程序的设计。
(1)绘制工厂模式结构视图
(2)
给出实例类图并实现代码。
2.2所用模式结构视图
2.3实例类图
2.4实例实现代码
图片读取工厂类:
lrz0101ImageReaderFactory
packagecom.bluesky1;
publicclasslrz0101ImageReaderFactory{
publiclrz0101ImageReaderFactoryproductReaderFactory(Strings){
lrz0101ImageReaderFactoryreader=null;
if(s.equals("JPG")){
reader=newlrz0101JpgReaderFactory();
}
elseif(s.equals("GIF")){
reader=newlrz0101GifReaderFactory();
}
else{
reader=newlrz0101ImageReaderFactory();
}
returnreader;
}
}
Jpg图片读取工厂类:
lrz0101JpgReaderFactory
packagecom.bluesky1;
publicclasslrz0101JpgReaderFactoryextendslrz0101ImageReaderFactory{
publiclrz0101ImageReaderproductImageReader(){
lrz0101ImageReaderiread=newlrz0101GifReader();
returniread;
}
}
Gif图片读取工厂类:
lrz0101JpgReaderFactory
packagecom.bluesky1;
publicclasslrz0101GifReaderFactoryextendslrz0101ImageReaderFactory{
publiclrz0101ImageReaderproductImageReader(){
lrz0101ImageReaderiread=newlrz0101GifReader();
returniread;
}
}
图片读取器类:
lrz0101ImageReader
packagecom.bluesky1;
publicclasslrz0101ImageReader{
publicvoidreadImage(){
}
}
Jpg图片读取器类:
lrz0101JpgReader
packagecom.bluesky1;
publicclasslrz0101JpgReaderextendslrz0101ImageReader{
publiclrz0101ImageReaderproductImageReader(){
lrz0101ImageReaderiread=newlrz0101JpgReader();
returniread;
}
}
Gif图片读取器类:
lrz0101GifReader
packagecom.bluesky1;
publicclasslrz0101GifReaderextendslrz0101ImageReader{
publicvoidreadImage(){
System.out.println("ReadGIFImage");
}
}
测试类:
Test
packagecom.bluesky1;
publicclasslrz0101Test{
publicstaticvoidmain(String[]args){
lrz0101Testtest=newlrz0101Test();
lrz0101ImageReaderFactoryirf=newlrz0101ImageReaderFactory();
lrz0101ImageReaderFactory
ir=irf.productReaderFactory("JPG");
lrz0101ImageReaderFactoryir1=irf.productReaderFactory("GIF");
lrz0101ImageReaderFactoryir2=irf.productReaderFactory("PNG");
piti(ir);
piti(ir1);
piti(ir2);
}
publicstaticvoidcompiti(lrz0101ImageReaderFactoryir){
if(irinstanceoflrz0101JpgReaderFactory){
ir=(lrz0101JpgReaderFactory)ir;
lrz0101ImageReaderireader=((lrz0101JpgReaderFactory)ir).productImageReader();
ireader.readImage();
}elseif(irinstanceoflrz0101GifReaderFactory){
ir=(lrz0101GifReaderFactory)ir;
lrz0101ImageReaderireader=((lrz0101GifReaderFactory)ir).productImageReader();
ireader.readImage();
}else{
System.out.println("无法读取该类型的图片格式");
}
}
}
2.5运行结果
3抽象工厂模式
3.1作业题目
某软件公司要推出一款新的手机游戏软件,该软件支持IOS、Android和WindowsPhone等多个智能手机操作系统平台,针对不同的手机操作系统,该游戏软件提供了不同的游戏操作控制类(OperatioinController)游戏界面控制类(InterfaceController),并提供的相应的工厂类来封装这些类的初始化过程。
该软件要求具有较好的扩展性,以支持新的操作系统平台,为了满足上述要求,试采用抽象工厂模式对其进行设计。
(1)绘制抽象工厂模式结构视图;
(2)请绘制该实例类图,并代码实现。
3.2所用模式结构视图
3.3实例类图
3.4实例实现代码
操作系统父类:
lrz0101OperatingSystem
packagecom.bluesky4;
publicclasslrz0101OperatingSystem{
publiclrz0101GameControllergc;
publiclrz0101GameUiControllerguic;
publiclrz0101GameControllergetGameCtroller(){
returngc;
}
publiclrz0101GameUiControllergetGameUiController(){
returnguic;
}
}
游戏控制父类:
lrz0101GameController
packagecom.bluesky4;
publicclasslrz0101GameController{
publicvoidplay(){
System.out.println("游戏控制加载中。
。
。
。
。
。
");
}
}
游戏界面控制父类:
lrz0101GameUiController
packagecom.bluesky4;
publicclasslrz0101GameUiController{
publicvoidshowUI(){
System.out.println("界面加载中。
。
。
。
。
。
。
");
}
}
IOS工厂类:
lrz0101IosSystem
packagecom.bluesky4;
publicclasslrz0101IosSystemextendslrz0101OperatingSystem{
publiclrz0101GameControllergetGameCtroller(){
this.gc=newlrz0101IosGameController();
returnthis.gc;
}
publiclrz0101GameUiControllergetGameUiController(){
this.guic=newlrz0101IosUiController();
returnthis.guic;
}
}
Android工厂类:
lrz0101AndroidSystem
packagecom.bluesky4;
publicclasslrz0101AndroidSystemextendslrz0101OperatingSystem{
publiclrz0101GameControllergetGameCtroller(){
this.gc=newlrz0101AndroidGameControlller();
returnthis.gc;
}
publiclrz0101GameUiControllergetGameUiController(){
this.guic=newlrz0101AndroidUiController();
returnthis.guic;
}
}
Windows工厂类:
lrz0101WindowsSystem
packagecom.bluesky4;
publicclasslrz0101WindowsSystemextendslrz0101OperatingSystem{
publiclrz0101GameControllergetGameCtroller(){
this.gc=newlrz0101WindowsGameController();
returnthis.gc;
}
publiclrz0101GameUiControllergetGameUiController(){
this.guic=newlrz0101WindoswUiController();
returnthis.guic;
}
}
IOS游戏控制类:
lrz0101IosGameController
packagecom.bluesky4;
publicclasslrz0101IosGameControllerextendslrz0101GameController{
publicvoidplay(){
System.out.println("IOS游戏控制加载中......");
}
}
IOS游戏界面控制类:
lrz0101IosUiController
packagecom.bluesky4;
publicclasslrz0101IosUiControllerextendslrz0101GameUiController{
publicvoidshowUI(){
System.out.println("IOS游戏界面加载中......");
}
publicvoidp(){
System.out.println("Hello");
}
}
Android游戏控制类:
lrz0101AndroidGameControlller
packagecom.bluesky4;
publicclasslrz0101AndroidGameControlllerextendslrz0101GameController{
publicvoidplay(){
System.out.println("Android游戏控制加载中......");
}
}
Android游戏界面控制类:
lrz0101AndroidGameControlller
packagecom.bluesky4;
publicclasslrz0101AndroidUiControllerextendslrz0101GameUiController{
publicvoidshowUI(){
System.out.println("Android游戏界面加载中......");
}
}
Windows游戏控制类:
lrz0101WindowsGameController
packagecom.bluesky4;
publicclasslrz0101WindowsGameControllerextendslrz0101GameController{
publicvoidplay(){
System.out.println("Windows游戏控制加载中......");
}
}
Windows游戏界面控制类:
lrz0101WindoswUiController
packagecom.bluesky4;
publicclasslrz0101WindoswUiControllerextendslrz0101GameUiController{
publicvoidshowUI(){
System.out.println("Windows游戏界面加载中......");
}
}
测试类:
lrz0101Test
packagecom.bluesky4;
publicclasslrz0101Test{
publicstaticvoidmain(String[]args){
lrz0101Testtest=newlrz0101Test();
lrz0101OperatingSystemios=newlrz0101IosSystem();
lrz0101OperatingSystemandroid=newlrz0101AndroidSystem();
lrz0101OperatingSystemwindows=newlrz0101WindowsSystem();
test.show(ios);
System.out.println();
test.show(android);
System.out.println();
test.show(windows);
}
publicstaticvoidshow(lrz0101OperatingSystemios){
lrz0101OperatingSystemos;
lrz0101GameControlleriosgc;
lrz0101GameUiControlleriosuic;
iosgc=ios.getGameCtroller();
iosuic=ios.getGameUiController();
iosgc.play();
iosuic.showUI();
}
}
3.5运行结果
4建造者模式
4.1作业题目
某软件公司要开发一个视频播放软件,为了给用户提供方便,该播放软件提供了多种界面显示模式,如完整模式、精简模式、记忆模式、网络模式等。
在不同的显示模式下,主界面的组成元素有所差异,如在完整模式下将显示菜单、播放列表、主窗口、控制条等,在精简模式下只显示主窗口和控制条,而在记忆模式下,将显示主窗口、控制条、收藏列表等。
试用建造者模式设计软件。
(1)给出建造者模式等结构视图
(2)给出该实例等类图及代码实现
4.2所用模式结构视图
4.3实例类图
4.4实例实现代码
主窗口类:
lrz0101MainScreen
packagecom.bluesky3;
publicclasslrz0101MainScreen{
publicStringmenu;
publicStringplayList;
publicStringmainWindow;
publicStringcontrolBar;
}
模式建造类:
lrz0101ModelBulider
packagecom.bluesky3;
publicclasslrz0101ModelBulider{
protectedlrz0101MainScreenscreen=newlrz0101MainScreen();
publicvoidbuildMenu(){
}
publicvoidbuildPlayList(){
}
publicvoidbuildMainWindow(){
}
publicvoidbuildControlBar(){
}
publiclrz0101MainScreengetScreen(){
returnscreen;
}
}
模式控制类:
lrz0101ModelController
packagecom.bluesky3;
publicclasslrz0101ModelController{
privatelrz0101ModelBulidermb;
publicvoidsetModeBuilder(lrz0101ModelBulidermb){
this.mb=mb;
}
publiclrz0101MainScreenconstruct(){
mb.buildControlBar();
mb.buildMainWindow();
mb.buildPlayList();
mb.buildMenu();
mb.getScreen();
returnmb.getScreen();
}
}
完整显示类:
lrz0101FullStyle
packagecom.bluesky3;
publicclasslrz0101FullStyleextendslrz0101ModelBulider{
publicvoidbuildMenu(){
screen.menu="菜单栏显示";
}
publicvoidbuildPlayList(){
screen.playList="播放列表显示"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 南华 大学 软件设计 模式 实验