版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
10试验二设计模式试验一一、试验目的PowerDesigner和任意一种面对对象编程语言实现几种常见的设计模式构造,学习如何使用代码实现这些模式,并学会分析这些模式的使用效果。二、试验内容PowerDesigner和任意一种面对对象编程语言实现简洁工厂模式、工厂方法模式、抽象工厂模式、单例模式、适配器模式、桥接模式和代码。面对对象设计原则在某图形库API中供给了多种矢量图模板,用户可以基于这些矢量图创立不同的显示图形,图形库设计人员设计的初始类图如下所示:ClientCircle Triangle Rectangle+init :void +init :void +init :void+setColor:void +setColor:void +setColor:void+fill :void +fill :void +fill :void+setSize :void +setSize :void +setSize :void+display :void +display :void +display :void... ... ...在该图形库中,每个图形类〔如Circle、Triangle等〕的init方法用于初始化所创立的图形,setColorfill方法用于设置图形的大小,display方法用于显示图形。客户类(Client)在使用该图形库时觉察存在如下问题:①由于在创立窗口时每次只需要使用图形库中的一种图形,因此在更换图形时需要修改客户类源代码;②在图形库中增加并使用的图形时需要修改客户类源代码;③客户类在每次使用图形对象之前需要先创立图形对象,有些图形的创立过程较为复杂,导致客户类代码冗长且难以维护。现需要依据面对对象设计原则对该系统进展重构,要求如下:①隔离图形的创立和使用,将图形的创立过程封装在特地的类中,客户类在使用图形时无须直接创立图形对象,甚至不需要关心具体图形类类名;②客户类能够便利地更换图形或使用增图形,无须针对具体图形类编程,符合开闭原则。绘制重构之后的类图并说明在重构过程中所运用的面对对象设计原则。简洁工厂模式使用简洁工厂模式设计一个可以创立不同几何外形(Shape),如圆形(Circle)、矩形(Rectangle)和三角形(Triangle)等的绘图工具类,每个几何图形均具有绘制Draw和擦除Erase两个方法,要求在绘制不支持的几何图形时,抛出一个UnsupportedShapeException特别,绘制类图并编程模拟实现。工厂方法模式现需要设计一个程序来读取多种不同类型的图片格式图片读取器(ImageReader)GIF图片读取器(GifReader)用于读取GIFJPG图(JpgReader)用于读取JPG格式的图片。图片读取器对象通过图片读取器工厂ImageReaderFactory来创立,ImageReaderFactory是一个抽象类,用于定义创立图片读取器GifReaderFactory和JpgReaderFactory用于创立具体的图片读取器对象。试使用工厂方法模式设计该程序,绘制类图并编程模拟实现。抽象工厂模式浅绿色按钮Spring风格浅绿色按钮Spring风格绿色边框文本框绿色边框组合框皮肤库浅蓝色按钮Summer风格蓝色边框文本框蓝色边框组合框图并编程模拟实现。单例模式个或三个,设计并编写代码实现一个多例类。单例模式〔JavaAWT/Swing开发中可使用JDesktopPane和JInternalFrame来实现,要求在主窗体中某个内部子窗体只能实例化一次,即只能弹出一个一样的子窗体,如以下图所示,编程实现该功能。〔注:用C#C++实现类似功能也可以〕适配器模式现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),类QuickSortquickSort(int[])BinarySearch的binarySearch(int[],int)下将类QuickSort和类BinarySearch的方法适配到DataOperation〔要求实现快速排序和二分查找〕适配器模式WindowsMediaPlayerRealPlayer是两种常用的媒体播放器,它们的API构造和调用API,而且在将来可能还需要支持拟实现。桥接模式某软件公司欲开发一个跨平台图像扫瞄系统,要求该系统能够显示BMP、JPG、GIF、PNG等多种格式的文件,并且能够在Windows、Linux、Unix等多个操作系统上运行。系统首先将各种格式的文件解析为像素矩阵(Matrix),然后将像素矩阵显示在屏幕上,在不同的编程模拟实现。组合模式北京总部教务办公室北京总部教务办公室湖南分校行政办公室教务办公室长沙教学点湘潭教学点行政办公室教务办公室行政办公室教务办公室行政办公室在该教育机构的OA组织构造,绘制相应的类图并编程模拟实现,在客户端代码中模拟下发公文。三、试验要求选择适宜的面对对象设计原则对系统进展重构,正确无误绘制重构之后的类图;正确无误绘制简洁工厂模式、工厂方法模式、抽象工厂模式、单例模式、适配器模式、桥接模式和组合模式实例的模式构造图;单例模式、适配器模式、桥接模式和组合模式实例,代码运行正确无误。四、试验步骤PowerDesigner绘制重构之后的类图;使用PowerDesigner绘制简洁工厂模式实例构造图并用面对对象编程语言实现该模式实例;使用PowerDesigner绘制工厂方法模式实例构造图并用面对对象编程语言实现该模式实例;使用PowerDesigner绘制抽象工厂模式实例构造图并用面对对象编程语言实现该模式实例;使用PowerDesigner绘制单例模式实例构造图并用面对对象编程语言实现该模式实例;使用PowerDesigner绘制适配器模式构造图并用面对对象编程语言实现该模式;使用PowerDesigner绘制桥接模式构造图并用面对对象编程语言实现该模式;使用PowerDesigner绘制组合模式构造图并用面对对象编程语言实现该模式。五、试验报告要求供给重构之后的类图,简要说明重构过程中所运用的面对对象设计原则;供给简洁工厂模式实例构造图及实现代码;供给工厂方法模式实例构造图及实现代码;供给抽象工厂模式实例构造图及实现代码;供给单例模式实例构造图及实现代码;供给适配器模式实例构造图及实现代码;供给桥接模式实例构造图及实现代码;供给组合模式实例构造图及实现代码;留意调整类图中文字的字体及字号,留意图的整体布局和图的大小,避开使用穿插线,留意代码字体和颜色,代码字体需全都,颜色需统一;认真写好试验总结;姓名试验2.do060102张三试验2.do全部材料〔包括类图和源代码〕均放在一个Word文件中,格式为docdocx,不需要提交PowerDeigner所保存的oom模型,也无须单独提交源代码。六、试验结果重构之后的类图:ClientShape+init :void+fill :voidShapeFactory...
+setSize:void+display:void...RectangleFactory
TriangleFactory
CircleFactory
Circle
+init
:void
Traingle...
...
...
<<create>>: : :returnnew
+fill :void+setSize:void
+init :void
RectanglereturnnewRectangle
returnnewTriangle;
Circle;
+display:void...
+fill :void+setSize:void
+init
:void; <<create>>
+display:void
...
+fill
:void<<create>>
+setSize:void+display:void...重构过程中所使用的面对对象设计原则及简要说明:重构之后实现了开闭原则:在增加一个图形时,只需要增加一个图形类和一个图形的工厂类,然后将图形的工厂类放入配置文件,从而使增加图形时不用修改源代码,完全还实现了单一职责原则:原先的客户端类,需要创立具体的用户对象,担当了过多的职了单一职责原则;另外还实现了依靠倒转原则:客户端完全只针对抽象编程,没有依靠于具体的细节,只需要针对ShapeFactoryShape编程;类图:ClientShape+Draw:void+Erase:void...Circle+Draw:void+Erase:void...
Triangle+Draw:void+Erase:void...
Rectangle+Draw:void+Erase:void...if(arg.equalsIgnoreCase(“Circle“)){}else
returnnewCircle;if(arg.equalsIgnoreCase(“Triangle“)){
ShapeFactory}else{
returnnewTraingel;returnnewRectangle;
+produceShape(Stringarg):Shape...实现代码://代码颜色使用黑色,字体使用TimesNewRoman或Arial,字号为五号,抽象产品类:ShapepublicinterfaceShape{publicvoiddraw;publicvoiderase;}具体产品类:CirclepublicclassCircleimplementsShape{publicvoiddraw{“drawCircle. “);}publicvoiderase{“eraseCircle!“);}}具体产品类:TrianglepublicclassTriangleimplementsShape{publicvoiddraw{“drawTriangle. “);}publicvoiderase{“eraseTriangle!“);}}具体产品类:RectanglepublicclassRectangleimplementsShape{publicvoiddraw{“drawRectangle......“); publicvoiderase{“eraseRectangle!“);}}工厂类:ShapeFactorypublicclassShapeFactory{publicstaticShapeproduceShape(Stringshape)throwsException{if(shape.equalsIgnoreCase(“Circle“)){“生产一个Circle对象!“);returnnewCircle;}elseif(shape.equalsIgnoreCase(“Triangle“)){“生产一个Triangle对象!“);returnnewTriangle;}elseif(shape.equalsIgnoreCase(“Rectangle“)){“生产一个Rectangle对象!“);returnnewRectangle;}else{thrownewException(“UnsupportedShapeException!“);}}}XML操作工具类:XMLUtilimport;publicclassXMLUtil{publicstaticStringgetClassName{import;import;import;import;import;try{
DocumentBuilderFactorydFactory=DocumentBuilderFactory.newInstance;DocumentBuilderbuilder=dFactory.newDocumentBuilder;Documentdoc;doc=builder.parse(newFile(“src/com/config.xml“));NodeListnl=doc.getElementsByTagName(“className“);NodeclassNode=nl.item(0).getFirstChild;StringclassName=classNode.getNodeValue.trim;returnclassName;}catch(Exceptione){e.printStackTrace;returnnull;}}}配置文件:config.xml<?xmlversion=“1.0“?><config><className>Triangle</className></config></config>(8)客户端测试类:ClientpublicclassClient{publicstaticvoidmain(String[]args){try{Shapeshape;StringclassName=XMLUtil.getClassName;shape=ShapeFduceShape(className);shape.draw;shape.erase;}catch(Exceptione){;}}}ClientJifReaderFactoryClientJifReaderFactoryJifReader<<create>>+produceImageReader:ImageReader...+readImage:void...ImageReaderFactoryImageReader:returnnewJpgReader;+produceImageReader:ImageReader...+readImage:void...JpgReaderFactory<<create>>JpgReader+produceImageReader:ImageReader...+readImage:void...:returnnewJpgReader;抽象产品类:ImageReaderFactory抽象产品类:ImageReaderFactorypublicinterfaceImageReaderpublicvoidreadImage;}具体产品类:JpgReaderpublicclassJpgReaderimplementsImageReader{publicvoidreadImage{“readjgpiamge. “);}}具体产品类:JifReaderpublicclassJifReaderimplementsImageReader{publicvoidreadImage{“readjifiamge. “);}}抽象工厂类:ImageReaderFactorypublicinterfaceImageReaderFactory{publicImageReaderproduceImageReader;}具体工厂类:JpgReaderFactorypublicclassJpgReaderFactoryimplementsImageReaderFactory{publicImageReaderproduceImageReader{“生产一个jpgreader. “);returnnewJpgReader;}}具体工厂类:JifReaderFactorypublicclassJifReaderFactoryimplementsImageReaderFactory{publicImageReaderproduceImageReader{“生产一个jifreader. “);returnnewJifReader;}}XML操作工具类:XMLUtilimport;import;import;import;import;import;publicclassXMLUtil{publicstaticObjectgetBean{try{DocumentBuilderFactorydFactory=DocumentBuilderFactory.newInstance;DocumentBuilderbuilder=dFactory.newDocumentBuilder;Documentdoc;doc=builder.parse(newFile(“src/config.xml“));NodeListnl=doc.getElementsByTagName(“className“);NodeclassNode=nl.item(0).getFirstChild;StringcName=classNode.getNodeValue;Classc=Class.forName(cName);Objectobj=c.newInstance;returnobj;}catch(Exceptione){e.printStackTrace;!“);returnnull;}}}配置文件:config.xml<?xmlversion=“1.0“?><config><className>JpgReaderFactory</className></config>客户端测试类:ClientpublicclassClient{publicstaticvoidmain(Stringargs[]){try{ImageReaderimageReader;ImageReaderFactoryimageReaderFactory;imageReaderFactory=(ImageReaderFactory)XMLUtil.getBean;imageReaderimageReader=imageReaderFduceImageReader;imageReader.readImage;}catch(Exceptione){;}}}类图:ClientClientAbstractButton+action:void...SkinFactoryGreenButtonBlueButton+createButton :AbstractButton+createText :AbstractText+createCombox:AbstractCombox...+action:void...+action:void...AbstractTextSpringSkinFactory+action:void...+createButton :AbstractButton+createText :AbstractText+createCombox:AbstractCombox...GreenTextBlueText+action:void...+action:void...SummerSkinFactoryAbstractCombox+createButton :AbstractButton+createText :AbstractText+action:void...+createCombox:AbstractCombox...GreenComboxBlueCombox+action:void...+action:void...(1)抽象产品类:(1)抽象产品类:AbstractButtonpublicinterfaceAbstractButton{publicvoidaction;}具体产品类:GreenButtonpublicclassGreenButtonimplementsAbstractButton{publicvoidaction{“Spring风格的greenbutton...“);}}具体产品类:BlueButtonpublicclassBlueButtonimplementsAbstractButton{publicvoidaction{“Summer风格的bluebutton...“);}}抽象产品类:AbstractTextpublicinterfaceAbstractText{publicvoidaction;}具体产品类:GreenTextpublicclassGreenTextimplementsAbstractText{publicvoidaction{“Spring风格的greentext...“);}}具体产品类:BlueTextpublicclassBlueTextimplementsAbstractText{publicvoidaction{“Summer风格的bluetext...“);}}抽象产品类:AbstractComboxpublicinterfaceAbstractCombox{publicvoidaction;}具体产品类:GreenComboxpublicclassGreenComboximplementsAbstractCombox{publicvoidaction{“Spring风格的greencombox...“);}}具体产品类:BlueComboxpublicclassBlueComboximplementsAbstractCombox{publicvoidaction{“Summer风格的bluecombox...“);}}抽象工厂类:SkinFactorypublicinterfaceSkinFactory{publicAbstractButtoncreateButton;publicAbstractTextcreateText;publicAbstractComboxcreateCombox;}具体工厂类:SpringSkinFactorypublicclassSpringSkinFactoryimplementsSkinFactory{publicAbstractButtoncreateButton{“SpringSkinFactory生产greenbutton...“);returnnewGreenButton;}publicAbstractTextcreateText{“SpringSkinFactory生产greentext...“);returnnewGreenText;}publicAbstractComboxcreateCombox{“SpringSkinFactory生产greencombox...“);returnnewGreenCombox;}}具体工厂类:SummerSkinFactorypublicclassSummerSkinFactoryimplementsSkinFactory{publicAbstractButtoncreateButton{“SummerSkinFactory生产bluebutton...“);returnnewBlueButton;}publicAbstractTextcreateText{“SummerSkinFactory生产bluetext...“);returnnewBlueText;}publicAbstractComboxcreateCombox{“SummerSkinFactory生产bluecombox...“);returnnewBlueCombox;}}配置文件:config.xml<?xmlversion=“1.0“?><config><className>SpringSkinFactory</className></config>XML操作工具类:XMLUtil(与第三题中的XMLUtil一样)(15)客户端测试类:ClientpublicclassClient{publicstaticvoidmain(Stringargs[]){try{SkinFactorysFactory;AbstractButtonbutton;AbstractTexttext;AbstractComboxcombox;sFactory=(SkinFactory)XMLUtil.getBean;button=sFactory.createButton;text=sFactory.createText;combox=sFactory.createCombox;button.action;text.action;combox.action;}catch(Exceptione){;}}}}类图:0..20..2ClientPrinterinstance1:Printer =nullinstance2:Printer =nullNationality+getInstance:Printer...if(no==1){if(instance1==null)instance1=newPrinter;returninstance1;}if(no==2){if(instance2==null)instance2=newPrinter;returninstance2;}(1)多例类:(1)多例类:PrinterpublicclassPrinter{privatevolatilestaticPrinterinstance1=null;privatevolatilestaticPrinterinstance2=null;publicPrinter{}publicstaticPrintergetInstance(intno){if(no==1){if(instance1==null){synchronized(Printer.class){if(instance1==null){“创立第一台打印机 “);instance1=newPrinter;}}}“调用第一台打印机 “);returninstance1;}elseif(no==2){if(instance2==null){synchronized(Printer.class){if(instance2==null){“创立其次台打印机 “);instance2=newPrinter;}}}“调用其次台打印机 “);returninstance2;}else{!“);}returnnull;}}客户端测试类:ClientpublicclassClient{publicstaticvoidmain(Stringargs[]){Printerp1,p2;p1=Printer.getInstance(1);p2=Printer.getInstance(2);p1=Printer.getInstance(1);p2=Printer.getInstance(2);}}类图:ClientClientinternalFrameJInternalFrameinternalFrame:JInternalFramedesktopPane :JDesktopPane+actionPerformed:JInternalFrame...createsif(internalFrame==null){JInternalFrame;}(1)单例类:(1)单例类:JinternalFrameimport;import;import;import;import;import;import;import;import;import;import;import;publicclassJInternalFrameDemolextendsJFrameimplementsActionListener{JDesktopPanedesktopPane;JInternalFrameinternalFrame;publicJInternalFrameDemol{super(“JInternalFrameDemo1“);ContainercontentPane=this.getContentPane;contentPane.setLayout(newBorderLayout);JButtonbutton=newJButton(“CrateNewInternalFrames“);button.addActionListener(this);contentPane.add(button,BorderLayout.SOUTH);desktopPane=newJDesktopPane;contentPane.add(desktopPane);this.setSize(newDimension(300,300));this.setVisible(true);this.addWindowListener(newWindowAdapter{@OverridepublicvoidwindowClosing(WindowEvente){System.exit(0);}});}publicvoidactionPerformed(ActionEvente){if(internalFrame==null){internalFrame=newJInternalFrame(“InternaleFrame“,true,true,true,true);internalFrame.setLocation(20,20);internalFrame.setSize(newDimension(200,200));internalFrame.setVisible(true);ContainericontentPane=internalFrame.getContentPane;JTextAreatextArea=newJTextArea;JButtonb=newJButton(“InternaleFrameButton“);icontentPane.add(textArea,“Center“);icontentPane.add(b,“South“);desktopPane.add(internalFrame);//this.getContentPane.add(internalFrame);try{internalFrame.setSelected(true);}catch(ex){“Exceptionwhileselecting“);}}}}}(2)客户端类:ClientpublicclassClient{publicstaticvoidmain(Stringargs[]){newJInternalFrameDemol;}}类图:Client
DataOperation+sort(intint[]) :void+search(intint[],intno) :intBinarySearchquicksort.quickSort; QBAdapterbsearch :BinarySearchquicksort:QuickSort+sort(intint[]) :void+search(intint[],intno) :intbsearch.binarySearch;实现代码:
+binarySearch(intint[],intno):int...QuickSort+quickSort(intint[]) :void...目标类:目标类:DataOperationpublicclassDataOperation{publicintsearch(intlist[],intno){return0;}publicvoidsort(intlist[]){}}适配器类:QBAdapterpublicclassQBAdapterextendsDataOperation{privateQuickSortqs;privateBinarySearchbs;publicQBAdapter{qs=newQuickSort;bs=newBinarySearch;}publicvoidsort(intlist[]){“调用QuickSort中的quickSort方法 “);qs.quickSort(list);}publicintsearch(intlist[],intno){intresult;“调用BinartSearch中的binarySearch方法 “);result=bs.binarySearch(list,no);returnresult;}}适配者类:QuickSortpublicclassQuickSort{publicQuickSort{}publicvoidquickSort(intlist[]){intsize=list.length;quickSortMethod(list,0,size-1);}privatevoidquickSortMethod(intlist[],intleft,intright){intq;if(left<right){q=partition(list,left,right);quickSortMethod(list,left,q-1);quickSortMethod(list,q+1,right);}}privateintpartition(intlist[],intleft,intright){intshaft=list[left];inttemp=0;while(left<right){while(list[right]>shaft)right--;while(list[left]<shaft)left++;if(list[left]==list[right]){right--;}else{temp=list[left];list[left]=list[right];list[right]=temp;}}list[left]=shaft;returnleft;}}适配者类:BinarySearchpublicclassBinarySearch{publicintbinarySearch(intlist[],intno){intleft=0;intright=list.length;try{while(left<=right){intmiddle=(left+right)/2;if(list[middle]==no)returnmiddle;elseif(list[middle]>no)right=middle-1;else}
left=middle+1;}catch(Exceptione){“没有找到可以匹配的值 “);}return-1;}}XML文件操作工具类:XMLUtilimport;import;import;import;import;import;publicclassXMLUtil{publicstaticObjectgetBean{try{DocumentBuilderFactorydFactory=DocumentBuilderFactory.newInstance;DocumentBuilderbuilder=dFactory.newDocumentBuilder;Documentdoc;doc=builder.parse(newFile(“src/config.xml“));NodeListnl=doc.getElementsByTagName(“className“);NodeclassNode=nl.item(0).getFirstChild;StringcName=classNode.getNodeValue;Classc=Class.forName(cName);Objectobj=c.newInstance;returnobj;}catch(Exceptione){e.printStackTrace;!“);returnnull;}}}配置文件:config.xml<?xmlversion=“1.0“?><config><className>QBAdapter</className></config>(7)(7)客户端测试类:ClientpublicclassClient{publicstaticvoidmain(Stringargs[]){intlist[]={5,3,7,6,2,1,9,8,4,5,5,5};DataOperationdataoperation;dataoperation=(DataOperation)XMLUtil.getBean;dataoperation.sort(list);for(inti=0;i<list.length;i++){+“ “);};“list[“+dataoperation.search(list,5)+“]=5“);}}类图:Client Player+playMedia(FilefileName):void...:windowsMediaPlayer.play
WindowsMediaPlayerAdapter-windowsMediaPalyer:WindowsMediaPlayer+playMedia(FilefileName):void...windowsMediaPlayer
:realPlayer.play;
RealPlayerAdapter-realPlayer:RealPlayer+playMedia(FilefileName):void...realPlayerWindowsMediaPlayer+play(FilefileName):void...
RealPlayer+play(FilefileName):void...实现代码:目标抽象类:Playerimport;publicclassPlayer{publicvoidplayMedia(FilefileURL){“nonono“);}}适配器类:RealPlayerAdapterimport;publicclassRealPlayerAdapterextendsPlayer{privateRealPlayerrealPlayer;publicRealPlayerAdapter{realPlayer=newRealPlayer;}publicvoidplayMedia(FilefileURL){“选择了RealPlayer适配器 “);realPlayer.play(fileURL);}}适配器类:WindowsMediaPlayerAdapterimport;publicclassWindowsMediaPlayerAdapterextendsPlayer{privateWindowsMediaPlayerwindowsMediaPlayer;publicWindowsMediaPlayerAdapter{windowsMediaPlayer=newWindowsMediaPlayer;}publicvoidplayMedia(FilefileURL){“选择了WindowsMediaPlayer适配器 “);windowsMediaPlayer.play(fileURL);}}适配者类:RealPlayerimport;publicclassRealPlayer{publicvoidplay(FilefileURL){“RealPlayer中的API...“);“开头播放“+fileURL.getName);}}适配者类:WindowsMediaPlayerimport;publicclassWindowsMediaPlayer{publicvoidplay(FilefileURL){“WindowsMediaPlayer中的API...“);“开头播放“+fileURL.getName);}}XML文件操作工具类:XMLUtilimport;import;import;import;import;import;publicclassXMLUtil{publicstaticObjectgetBean{try{DocumentBuilderFactorydFactory=DocumentBuilderFactory.newInstance;DocumentBuilderbuilder=dFactory.newDocumentBuilder;Documentdoc;doc=builder.parse(newFile(“src/config.xml“));NodeListnl=doc.getElementsByTagName(“className“);NodeclassNode=nl.item(0).getFirstChild;StringcName=classNode.getNodeValue;Classc=Class.forName(cName);Objectobj=c.newInstance;returnobj;}catch(Exceptione){e.printStackTrace;e.printStackTrace;returnnull;}}}配置文件:config.xml<?xmlversion=“1.0“?><config><className>WindowsMediaPlayerAdapter</className></config>客户端测试类:Clientimport;publicclassClient{publicstaticvoidmain(Stringargs[]){FilefileURL=newFile(“F:/test.rmvb“);Playerplayer;player=(Player)XMLUtil.getBean;player.playMedia(fileURL);}}ClientBMPImageClientBMPImage+parseImage:void...JPGImageImageBrowsingSystem{abstract}Image-image:Image+paintImage:voidimage+setImage...:void+parseImage:void...+parseImage:void...GIFImage+parseImage:void...PNGImageWindowsSystemUnixSystem+paintImage:void+paintImage:void+parseImage:void...LinuxSysgtem+paintImage:void实现代码:实现类接口:ImagepublicinterfaceImage{publicvoidparseImage;}具体实现类:BMPImagepublicclassBMPImageimplementsImage{publicvoidparseImage{“解析bmp图像 “);}}具体实现类:JIFImagepublicclassJIFImageimplementsImage{publicvoidparseImage{“解析jif图像 “);}}具体实现类:JPGImagepublicclassJPGImageimplementsImage{publicvoidparseImage{“解析jpg图像 “);}}具体实现类:PNGImagepublicclassPNGImageimplementsImage{publicvoidparseImage{“解析png图像 “);}}抽象类:ImageBrowsingSystempublicabstractclassImageBrowsingSystem{privateImageimage;publicImageBrowsingSystem{}publicvoidsetImage(Imageimage){this.image=image;}publicImagegetImage{returnthis.image;}publicabstractvoidpaintImage;}扩大抽象类:LinuxSystempublicclassLinuxSystemextendsImageBrowsingSystem{publicvoidpaintImage{“调用linuxsystem中的函数来绘制像素矩阵 “);}}扩大抽象类:LinuxSystempublicclassUnixSystemextendsImageBrowsingSystem{publicvoidpaintImage{“调用unixsystem中的函数来绘制像素矩阵 “);}}扩大抽象类:WindowsSystempublicclassWindowsSystemextendsImageBrowsingSystem{publicvoidpaintImage{“调用windowssystem中的函数来绘制像素矩阵 “);}}XML文件操作类:XMLUtilimport;import;import;import;import;import;publicclassXMLUtil{publicstaticObjectgetBean(Stringargs){try{DocumentBuilderFactorydFactory=DocumentBuilderFactory.newInstance;DocumentBuilderbuilder=dFactory.newDocumentBuilder;Documentdoc;doc=builder.parse(newFile(“src/config.xml“));NodeListnl=null;NodeclassNode=null;StringcName=null;nl=doc.getElementsByTagName(“className“);if(args.equals(“image“)){classNode=nl.item(0).getFirstChild;}elseif(args.equals(“imageBrowsingSystem“)){classNode=nl.item(1).getFirstChild;}cName=classNode.getNodeValue;Classc=Class.forName(cName);Objectobj=c.newInstance;returnobj;}catch(Exceptione){e.printStackTrace;!“);returnnull;}}}配置文件:config.xml<?xmlversion=“1.0“?><config><className>JIFImage</className><className>UnixSystem</className></config>客户端测试类:ClientpublicclassClient{publicstaticvoidmain(Stringargs[]){Imageimage;ImageBrowsingSystemimageBrowsingSystem;imageimage=(Image)XMLUtil.getBean(“image“);imageBrowsingSystem(ImageBrowsingSystem)XMLUtil.getBean(“imageBrowsingSystem“);imageBrowsingSystem.setImage(image);imageBrowsingSystem.getImage.parseImage;imageBrowsingSystem.paintImage;}}=ClientAbstractHeadClientAbstractHead{abstract}+receiveDocument:voidProvostOff
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 向心加速度课件
- 高一家长会教学课件
- 山东省德州市2023-2024学年高三物理上学期10月月考试题含解析
- 《突破思维定势》课件
- 作文书的教育课件
- 过敏性休克的临床特征
- 古诗劝学教育课件
- 珐琅课件教学课件
- 昆明理工大学津桥学院《影视特效制作》2021-2022学年第一学期期末试卷
- 绘画艺术模板
- 投影基础习题
- (完整文本版)作文格子模板(500字一页)
- 工程采购管理课件
- 眼科护理滴眼药水论文
- 环境材料学材料的环境影响评价课件
- 婷美祛斑体验活动策划
- IT技术行业团队建设工作方案
- 电子游戏行业市场调研报告
- 个人形象塑造计划书
- 《中国边疆概论》课件
- 股骨颈骨折闭合复位内固定术加速康复临床路径(2023版)
评论
0/150
提交评论