中南大学设计格式实验2_第1页
中南大学设计格式实验2_第2页
中南大学设计格式实验2_第3页
中南大学设计格式实验2_第4页
中南大学设计格式实验2_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

...wd......wd......wd...?软件体系构造?实验报告工程名称设计模式实验二专业班级软件1501学号姓名实验成绩:批阅教师:2017年12月12日实验2设计模式实验一实验学时:4每组人数:1实验类型:3〔1:根基性2:综合性3:设计性4:研究性〕实验要求:1〔1:必修2:选修3:其它〕实验类别:3〔1:根基2:专业根基3:专业4:其它〕一、实验目的1.熟练使用面向对象设计原那么对系统进展重构;2.熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的创立型设计模式和构造型设计模式,包括简单工厂模式、工厂方法模式、抽象工厂模式、单例模式、适配器模式、桥接模式和组合模式,理解每一种设计模式的模式动机,掌握模式构造,学习如何使用代码实现这些模式。二、实验内容1.在某图形库API中提供了多种矢量图模板,用户可以基于这些矢量图创立不同的显示图形,图形库设计人员设计的初始类图如下所示:在该图形库中,每个图形类〔如Circle、Triangle等〕的init()方法用于初始化所创立的图形,setColor()方法用于给图形设置边框颜色,fill()方法用于给图形设置填充颜色,setSize()方法用于设置图形的大小,display()方法用于显示图形。客户类(Client)在使用该图形库时发现存在如下问题:=1\*GB3①由于在创立窗口时每次只需要使用图形库中的一种图形,因此在更换图形时需要修改客户类源代码;=2\*GB3②在图形库中增加并使用新的图形时需要修改客户类源代码;=3\*GB3③客户类在每次使用图形对象之前需要先创立图形对象,有些图形的创立过程较为复杂,导致客户类代码冗长且难以维护。现需要根据面向对象设计原那么对该系统进展重构,要求如下:=1\*GB3①隔离图形的创立和使用,将图形的创立过程封装在专门的类中,客户类在使用图形时无须直接创立图形对象,甚至不需要关心具体图形类类名;=2\*GB3②客户类能够方便地更换图形或使用新增图形,无须针对具体图形类编程,符合开闭原那么。绘制重构之后的类图并说明在重构过程中所运用的面向对象设计原那么。2.在某RPG游戏中使用简单工厂模式创立游戏角色,该游戏可根据用户所选择的参数来创立不同的角色(Role),例如参数为“angel〞时创立一个天使角色,参数为“hero〞时创立一个英雄角色,参数为“witch〞时创立一个女巫角色。绘制类图并使用Java语言编程模拟实现。3.现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReader),如GIF图片读取器(GifReader)用于读取GIF格式的图片、JPG图片读取器(JpgReader)用于读取JPG格式的图片。图片读取器对象通过图片读取器工厂ImageReaderFactory来创立,ImageReaderFactory是一个抽象类,用于定义创立图片读取器的工厂方法,其子类GifReaderFactory和JpgReaderFactory用于创立具体的图片读取器对象。使用工厂方法模式设计该程序,绘制类图并编程模拟实现。需充分考虑系统的灵活性和可扩展性。4.某系统为了改进数据库操作的性能,用户可以自定义数据库连接对象Connection和语句对象Statement,针对不同类型的数据库提供不同的连接对象和语句对象,例如提供Oracle或MySQL专用连接类和语句类,而且用户可以通过配置文件等方式根据实际需要动态更换系统数据库。使用抽象工厂模式设计该系统,要求绘制对应的类图并使用Java语言编程模拟实现。5.使用单例模式的思想实现多例模式(Multiton),确保系统中某个类的对象只能存在有限个,例如两个或三个,设计并编写代码实现一个多例类。6.使用单例模式设计一个多文档窗口〔注:在JavaAWT/Swing开发中可使用JDesktopPane和JInternalFrame来实现〕,要求在主窗体中某个内部子窗体只能实例化一次,即只能弹出一个一样的子窗体,如以以下图所示,编程实现该功能。〔注:用C#或C++实现类似功能也可以〕7.现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch的binarySearch(int[],int)方法实现了二分查找算法。试使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法适配到DataOperation接口中。绘制类图并编程实现。〔要求实现快速排序和二分查找,使用对象适配器实现〕8.空客(Airbus)、波音(Boeing)和麦道(McDonnell-Douglas)都是飞机制造商,它们都生产载客飞机(PassengerPlane)和载货飞机(CargoPlane)。现需要设计一个系统,描述这些飞机制造商以及它们所制造的飞机种类。绘制类图并编程模拟实现。9.某移动社交软件欲增加一个群组(Group)功能。通过设置,用户可以将自己的动态信息,包括最新动态、新上传的视频以及分享的链接等,分享给某个特定的成员(Member),也可以分享给某个群组中的所有成员;用户可以将成员添加至某个指定的群组;此外,还允许用户在一个群组中添加子群组,以便更加灵活地实现面向特定人群的信息共享。选择一种适宜的设计模式来设计该群组功能,要求给出该模式的名称及定义,结合场景绘制相应的构造图并编程模拟实现〔类名、方法名和属性名可自行定义〕。10.某教育机构组织构造如以以下图所示:在该教育机构的OA系统中可以给各级办公室下发公文,试采用组合模式设计该机构的组织构造,绘制相应的类图并编程模拟实现,在客户端代码中模拟下发公文。三、实验要求1.选择适宜的面向对象设计原那么对系统进展重构,正确无误地绘制重构之后的类图;2.结合实例,正确无误地绘制简单工厂模式、工厂方法模式、抽象工厂模式、单例模式、适配器模式、桥接模式和组合模式的模式构造图;3.使用任意一种面向对象编程语言实现简单工厂模式、工厂方法模式、抽象工厂模式、单例模式、适配器模式、桥接模式和组合模式实例,代码运行正确无误。四、实验步骤1.选择适宜的面向对象设计原那么对系统进展重构,使用PowerDesigner绘制重构之后的类图;2.结合实例,使用PowerDesigner绘制简单工厂模式实例构造图并用面向对象编程语言实现该模式实例;3.结合实例,使用PowerDesigner绘制工厂方法模式实例构造图并用面向对象编程语言实现该模式实例;4.结合实例,使用PowerDesigner绘制抽象工厂模式实例构造图并用面向对象编程语言实现该模式实例;5.结合实例,使用PowerDesigner绘制多例模式实例构造图并用面向对象编程语言实现该模式实例;6.结合实例,使用PowerDesigner绘制单例模式实例构造图并用面向对象编程语言实现该模式实例。7.结合实例,使用PowerDesigner绘制适配器模式实例构造图并用面向对象编程语言实现该模式实例;8.结合实例,使用PowerDesigner绘制桥接模式实例构造图并用面向对象编程语言实现该模式实例;9.结合实例,使用PowerDesigner绘制组合模式实例构造图并用面向对象编程语言实现该模式实例。五、实验结果1.重构之后的类图: 重构过程中所使用的面向对象设计原那么及简要说明:根据题意采用了工厂方法模式,所谓工厂模式那么是定义一个用于创立对象的接口,但是让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到子类。使用了开闭原那么,单一职责原那么。2.类图: 实现代码://代码颜色使用黑色,字体使用TimesNewRoman或Arial,字号为五号,如Role类:publicabstractclassRole{publicabstractvoiddisplay();}Angle类:publicclassAngleextendsRole{publicAngle(){}publicvoiddisplay(){System.out.println("angle");}}Hero类:publicclassHeroextendsRole{publicHero(){}publicvoiddisplay(){System.out.println("hero");}}Witch类:publicclassWitchextendsRole{publicWitch(){}publicvoiddisplay(){System.out.println("witch");}}RoleFactory类:publicclassRoleFactory{publicstaticRolegetRole(Stringtype){Rolerole=null;if(type.equalsIgnoreCase("angle")){role=newAngle();}if(type.equalsIgnoreCase("witch")){role=newWitch();}if(type.equalsIgnoreCase("Hero")){role=newHero();}returnrole;}}Main类(客户端):publicclassMain{publicstaticvoidmain(String[]args){Rolerole;role=RoleFactory.getRole("hero");if(role==null){System.out.println("创立角色失败...请检查参数");}else{role.display();}//System.out.println("HelloWorld!");}}类图: 实现代码:ImageReadeFactary类:publicabstractclassImageReaderFactory{publicabstractImageReadercreateImageReadeer();}GifReaderFactory类:publicclassGifReaderFactoryextendsImageReaderFactory{publicImageReadercreateImageReadeer(){GifReadergifReader=newGifReader();returngifReader;}}JpgReaderFactory类:publicclassJpgReaderFactoryextendsImageReaderFactory{publicImageReadercreateImageReadeer(){JpgReaderjpgReader=newJpgReader();returnjpgReader;}}ImageReader类:publicabstractclassImageReader{publicvoidreadImage(){}}GifReader类:publicclassGifReaderextendsImageReader{publicvoidreadImage(){System.out.println("通过GifReader读取图片");}}JpgReader类:publicclassJpgReaderextendsImageReader{publicvoidreadImage(){System.out.println("通过JpgReader读取图片");}}XMLUtil类:importorg.w3c.dom.Document;importorg.w3c.dom.Node;importorg.w3c.dom.NodeList;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importjava.io.File;publicclassXMLUtil{//该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象publicstaticObjectgetBean()throwsException{//创立DOM文档对象DocumentBuilderFactorydocumentBuilderFactory=DocumentBuilderFactory.newInstance();DocumentBuilderdocumentBuilder=documentBuilderFactory.newDocumentBuilder();Documentdocument;document=documentBuilder.parse(newFile("config.xml"));//获取包含类名的文本结点NodeListnodeList=document.getElementsByTagName("imageType");NodeimageTypeNode=nodeList.item(0).getFirstChild();StringimageType=imageTypeNode.getNodeValue().trim();//通过类名生成实例对象并将其返回Classclazz=Class.forName(imageType+"ReaderFactory");Objectobject=clazz.newInstance();returnobject;}}Main类〔客户端〕:publicclassMain{publicstaticvoidmain(String[]args){ImageReaderFactoryimageReaderFactory=null;ImageReaderimageReader;try{imageReaderFactory=(ImageReaderFactory)XMLUtil.getBean();}catch(Exceptione){e.printStackTrace();}imageReader=imageReaderFactory.createImageReadeer();imageReader.readImage();}}4.类图: 实现代码:抽象工厂databaseFactory类:publicabstractclassdatabaseFactory{publicabstractConnectioncreateConnection();publicabstractStatementcreateStatement();}具体工厂MysqlFactory类:publicclassMysqlFactoryextendsdatabaseFactory{@OverridepublicConnectioncreateConnection(){returnnewmysqlConnection();}@OverridepublicStatementcreateStatement(){returnnewmysqlStatement();}}具体工厂OracleFactory类:publicclassOracleFactoryextendsdatabaseFactory{@OverridepublicConnectioncreateConnection(){returnneworacleConnection();}@OverridepublicStatementcreateStatement(){returnneworacleStatement();}}抽象产品Connection类:publicclassConnection{publicvoidconnection(){}}抽象产品Statement类:publicclassStatement{publicvoidsattement(){}}具体产品mysqlConnection类:publicclassmysqlConnectionextendsConnection{publicvoidconnection(){System.out.println("提供MySql连接对象");}}具体产品mysqlStatement类:publicclassmysqlStatementextendsStatement{publicvoidsattement(){System.out.println("提供mysql语句对象");}}具体产品oracleConnection类:publicclassoracleConnectionextendsConnection{publicvoidconnection(){System.out.println("提供oracle连接对象");}}具体产品oracleStatement类:publicclassoracleStatementextendsStatement{publicvoidsattement(){System.out.println("提供oracle语句对象");工具类XMLUtil:importorg.w3c.dom.Document;importorg.w3c.dom.Node;importorg.w3c.dom.NodeList;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importjava.io.File;publicclassXMLUtil{//该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象publicstaticObjectgetBean()throwsException{//创立DOM文档对象DocumentBuilderFactorydocumentBuilderFactory=DocumentBuilderFactory.newInstance();DocumentBuilderdocumentBuilder=documentBuilderFactory.newDocumentBuilder();Documentdocument;document=documentBuilder.parse(newFile("config.xml"));//获取包含类名的文本结点NodeListnodeList=document.getElementsByTagName("databaseType");NodedatabaseTypeNode=nodeList.item(0).getFirstChild();StringdatabaseType=databaseTypeNode.getNodeValue().trim();//通过类名生成实例对象并将其返回Classclazz=Class.forName(databaseType+"Factory");Objectobject=clazz.newInstance();returnobject;}}客户端Main类:publicclassMain{publicstaticvoidmain(String[]args){databaseFactorydaFactory=null;Connectionconnection;Statementstatement;try{daFactory=(databaseFactory)XMLUtil.getBean();}catch(Exceptione){e.printStackTrace();}if(daFactory==null){System.out.println("未获取到对象");}else{connection=daFactory.createConnection();statement=daFactory.createStatement();connection.connection();statement.sattement();}}}5.类图:实现代码:单例类Multiton:packageSingleton;importjava.util.*;publicclassMultiton{//两个或者三个privatestaticArrayList<Multiton>multitonList=newArrayList<>();privatefinalstaticintNUMBER=3;privateMultiton(){}publicstaticMultitongetInstance(){//TODO:implementif(multitonList.size()<NUMBER){System.out.println("创立新实例成功");Multitoncurrent=newMultiton();multitonList.add(current);returncurrent;}else{System.out.println("不能创立更多的实例");returnmultitonList.get(newRandom().nextInt(multitonList.size()));}}}客户端类Client:packageSingleton;publicclassClient{publicstaticvoidmain(String[]args){Multitonm1=Multiton.getInstance();Multitonm2=Multiton.getInstance();Multitonm3=Multiton.getInstance();Multitonm4=Multiton.getInstance();System.out.println("m1==m2:"+(m1==m2));System.out.println("m2==m3:"+(m2==m4));System.out.println("m3==m4:"+(m3==m4));}}6运行结果:.类图: 实现代码:客户端类Main:publicclassMain{publicstaticvoidmain(String[]args){System.out.println("HelloWorld!");newJInternalFrameDemo();}}类JInternalFrameDemo:importjava.awt.BorderLayout;importjava.awt.Container;importjava.awt.Dimension;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjavax.swing.JButton;importjavax.swing.JDesktopPane;importjavax.swing.JFrame;publicclassJInternalFrameDemoextendsJFrameimplementsActionListener{privatestaticJInternalFrame1internalFrame;ContainercontentPane=this.getContentPane();publicJInternalFrameDemo(){super("主窗体");contentPane.setLayout(newBorderLayout());JButtonbutton=newJButton("创立一个子窗体");button.addActionListener(this);contentPane.add(button,BorderLayout.SOUTH);this.setSize(newDimension(300,300));this.setVisible(true);this.addWindowListener(newWindowAdapter(){@OverridepublicvoidwindowClosing(WindowEvente){System.exit(0);}});}publicvoidactionPerformed(ActionEvente){internalFrame=JInternalFrame1.getJInternalFrame1("子窗体",true,true,true,true);internalFrame.setSize(newDimension(200,200));internalFrame.setVisible(true);JDesktopPanedesktopPane=newJDesktopPane();contentPane.add(desktopPane);desktopPane.add(internalFrame);try{internalFrame.setSelected(true);}catch(java.beans.PropertyVetoExceptionex){System.out.println("Exceptionwhileselecting");}}}类JInternalFrame1:importjavax.swing.JInternalFrame;publicclassJInternalFrame1extendsJInternalFrame{privatestaticJInternalFrame1JIF1=null;privateJInternalFrame1(Stringname,booleanb1,booleanb2,booleanb3,booleanb4){super(name,b1,b2,b3,b4);}publicstaticJInternalFrame1getJInternalFrame1(Stringname,booleanb1,booleanb2,booleanb3,booleanb4){if(JIF1==null)JIF1=newJInternalFrame1(name,b1,b2,b3,b4);returnJIF1;}}7.类图: 实现代码:目标抽象类DataOperation:publicinterfaceDataOperation{publicvoidsort(int[]a,intlow,inthigh);publicintsearch(int[]srcArray,intstart,intend,intkey);}适配者类QuickSort:publicclassQuickSort{publicvoidquickSout(int[]a,intlow,inthigh){intstart=low;intend=high;intkey=a[low];while(end>start){//从后往前比较while(end>start&&a[end]>=key)//如果没有比关键值小的,比较下一个,直到有比关键值小的交换位置,然后又从前往后比较end--;if(a[end]<=key){inttemp=a[end];a[end]=a[start];a[start]=temp;}//从前往后比较while(end>start&&a[start]<=key)//如果没有比关键值大的,比较下一个,直到有比关键值大的交换位置start++;if(a[start]>=key){inttemp=a[start];a[start]=a[end];a[end]=temp;}//此时第一次循环比较完毕,关键值的位置已经确定了。左边的值都比关键值小,右边的值都比关键值大,但是两边的顺序还有可能是不一样的,进展下面的递归调用}//递归if(start>low)quickSout(a,low,start-1);//左边序列。第一个索引位置到关键值索引-1if(end<high)quickSout(a,end+1,high);//右边序列。从关键值索引+1到最后一个}}适配者类BinarySearch:publicclassBinarySearch{publicintbinarySearch(intsrcArray[],intstart,intend,intkey){intmid=(end-start)/2+start;if(srcArray[mid]==key){returnmid;}if(start>=end){return-1;}elseif(key>srcArray[mid]){returnbinarySearch(srcArray,mid+1,end,key);}elseif(key<srcArray[mid]){returnbinarySearch(srcArray,start,mid-1,key);}return-1;}}适配器类DataOpAdapter:publicclassDataOpAdapterimplementsDataOperation{privateQuickSortqSort;privateBinarySearchbinarySearch;publicDataOpAdapter(QuickSortqSort,BinarySearchbinarySearch){this.qSort=qSort;this.binarySearch=binarySearch;}@Overridepublicintsearch(int[]srcArray,intstart,intend,intkey){returnbinarySearch.binarySearch(srcArray,start,end,key);}@Overridepublicvoidsort(int[]a,intlow,inthigh){qSort.quickSout(a,low,high);}}客户端类Main:publicclassMain{publicstaticvoidmain(String[]args){DataOperationdataOperation=newDataOpAdapter(newQuickSort(),newBinarySearch());int[]a={12,20,5,16,15,1,30,45,23,9};System.out.println("排序前:");for(inti=0;i<a.length;i++){System.out.print(a[i]+"");}intstart=0;intend=a.length-1;dataOperation.sort(a,start,end);System.out.println("\n"+"实现快速排序:");for(inti=0;i<a.length;i++){System.out.print(a[i]+"");}System.out.println("\n"+"实现了二分查找算法,查找“20〞");System.out.println(dataOperation.search(a,0,a.length-1,20));}}类图: 实现代码:抽象类Productor:packageBridgePattern;publicabstractclassProductor{protectedPlaneplane;publicvoidsetPlane(Planeplane){this.plane=plane;}publicabstractvoidproduct();}扩大抽象类AirbusPro:packageBridgePattern;publicclassAirbusProextendsProductor{@Overridepublicvoidproduct(){System.out.println("Airbuscompary");plane.createPlane();}}扩大抽象类McDonnellPro:packageBridgePattern;publicclassMcDonnellProextendsProductor{@Overridepublicvoidproduct(){System.out.println("McDonnellcompany");plane.createPlane();}}扩大抽象类BoeingPro:packageBridgePattern;publicclassBoeingProextendsProductor{@Overridepublicvoidproduct(){System.out.println("Boeingcompany");plane.createPlane();}}实现类接口Plane:packageBridgePattern;publicinterfacePlane{publicvoidcreatePlane();}具体实现类PassengerPlane;packageBridgePattern;publicclassPassengerPlaneimplementsPlane{@OverridepublicvoidcreatePlane(){System.out.println("bulidaPassengerPlane");}}具体实现类CargoPlane;packageBridgePattern;publicclassCargoPlaneimplementsPlane{@OverridepublicvoidcreatePlane(){System.out.println("buildaCargoPlane");}}客户端类Client〔没使用配置文件〕:packageBridgePattern;publicclassClient{publicstaticvoidmain(String[]args){Productorproductor;CargoPlanecargoPlane=newCargoPlane();//PassengerPlanepaplane=newPassengerPlane();productor=newAirbusPro();productor.setPlane(cargoPlane);duct();}}类图:模式:组合模式定义:组合多个对象形成树型构造以表示具有局部-整体关系的层次构造。组合模式让客户端可以统一对待单个对象和组合对象。CompositePattern:Composeobjectsintotreestructurestorepresentpart-wholehierarchies.Compositeletsclientstreatindividualobjectandcompositiionsofobjectuniformly. 实现代码:抽象构件类Component:packageCompositePattern;publicabstractclassComponent{publicabstractvoidadd(Componentccomponent);publicabstractvoidremove(Componentcomponent);publicabstractvoidshare(Componentcomponent);}叶子构件类Member:packageCompositePattern;importjava.util.ArrayList;publicclassMemberextendsComponent{publicMember(Stringname){=name;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){=name;}privateStringname;@Overridepublicvoidadd(Componentccomponent){System.out.println("调这个函数也没用");}@Overridepublicvoidremove(Componentcomponent){System.out.println("调这个函数也没用");}@Overridepublicvoidshare(Componentcomponent){if(componentinstanceofGroup){ArrayList<Component>components=((Group)component).getComponents();if(components.contains(this)){components.remove(this);}for(Componentobj:components){obj.share(obj);}components.add(this);}elseif(componentinstanceofMember){((Member)component).onMessage();}}publicvoidonMessage(){System.out.println(this.getName()+"收到消息");}}容器构件类Group:packageCompositePattern;importjava.util.ArrayList;publicclassGroupextendsComponent{publicGroup(Stringname){=name;}publicArrayList<Component>getComponents(){returncomponents;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){=name;}privateStringname;publicArrayList<Component>components=newArrayList<>();@Overridepublicvoidadd(Componentccomponent){components.add(ccomponent);}@Overridepublicvoidremove(Componentcomponent){components.remove(component);}@Overridepublicvoidshare(Componentcomponent){if(componentinstanceofGroup){ArrayList<Component>com=((Group)component).getComponents();for(Componentobject:components){object.share(object);}}elseif(componentinstanceofMember){((Member)component).onMessage();}}}客户端类Client:packageCompositePattern;publicclassClient{publicstaticvoidmain(String[]args){Componentgroup1=newGroup("Group1");Componentmember1=newMember("member1");Componentmember2=newMember("member2");Componentmember3=newMember("member3");Componentmember4=newMember("member4");group1.add(member1);group1.add(member2);group1.add(member3);group1.add(member4);System.out.println(((Member)member1).getName()+"分享了一条新动态");member1.share(group1);System.out.println("---------------------------");Componentgroup2=newGroup("group2");group2.add(group1);Componentmember5=newMember("member5");group2.add(member5);System.out.println(((Member)member5).getName()+"分享了一条新动态");member5.share(group2);}}10.类图: 实现代码:抽象构件类OrganizationComponent:packageCompositePattern2;publicclassOrganizationComponent{privateStringname;publicStringgetName(){return;}publicvoidsetName(StringnewName){=newName;}publicvoidaddComponent(OrganizationComponentorganizationComponent){}publicvoidremoveComponent(OrganizationComponentorganizationComponent){}publicOrganizationComponentgetChild(inti){returnnull;}publicvoidsendMessage(Stringmsg){}publicvoidonMessage(){}}叶子构件类Office:packageCompositePattern2;publicclassOfficeextendsOrganizationComponent{privateStringname;publicStringgetName(){return;}publicvoidsetName(StringnewName){=newName;}publicvoidaddComponent(OrganizationComponentorganizationComponent){System.out.println("errormethod");}publicvoidremoveComponent(OrganizationComponentorganizationComponent){System.out.println("errormethod");}publicOrganizationComponentgetChild(inti){System.out.println("errormethod");returnnull;}publicvoidsendMessage(Stringmsg){System.out.println("errormethod");}publicvoidonMessage(){System.out.println(this.getName()+"接收公文");}}

容器构件类DeptComponent:packageCompositePattern2;importjava.util.HashSet;importjava.util.Set;publicclassDeptComponentextendsOrganizationComponent{publicSet<OrganizationComponent>organizationCompoent=newHashSet<>();privateStringname;publicStringgetName(){return;}publicvoidsetName(StringnewName){=newName;}publicvoidaddComponent(OrganizationComponentorganizationComponent){organizationCompoent.add(organizationComponent);}publicvoidremoveComponent(OrganizationComponentorganizationComponent){organizationCompoent.remove(organizationComponent);}publicOrganizationComponentgetChild(inti){System.out.println("获取子代元素");returnnull;}publicvoidsendMessage(Stringmsg){

温馨提示

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

评论

0/150

提交评论