设计模式简单工厂_第1页
设计模式简单工厂_第2页
设计模式简单工厂_第3页
设计模式简单工厂_第4页
设计模式简单工厂_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

wordword/word简单工厂设计模式目录TOC\o"1-5"\h\z\u2224.1简单工厂模式动机与定义:22236.1简单工厂模式实例:4Product〔Shape抽象类〕代码:ConcreteProduct〔Juxing,YuanXing,SanJiao具体产品类〕代码:5JuXing类:5YuanXing类:6SanJiao类:Factory(Factory类)代码:(main类):运行结果:10108.1参考文献:10摘要本文从面向对象的角度对java接口的概念、作用以与使用它的好处做分析,讲解面向接口编程的方法,结合初步接触软件开发的人员习惯,从简单工厂设计模式的概念和其结构以与用途进展解析,重点讲解简单工厂设计模式在软件开发过程中的作用和好处,通过一些实例来说明简单工厂设计模式的特点。关键字面向对象;java接口;接口编程;简单工厂设计模式。 Eclipsejava语言开发4.1简单工厂模式动机与定义:在实际的软件开发过程中有时需要创建一些来自于一样父类的类的实例,为此可以专门定义一个类来负责创建这些类的实例,这些被创建的实例具有共同的父类。在这种情况下,可以通过传入不同的参数从而获取不同的对象,理由Java语言的特征,习惯上将创建其他类实例的方法定义为static方法,外部不需要实例化这个类就可以直接调用该方法来获得需要的对象,该方法也成为静态工厂方法。考虑一个简单的软件应用场景,一个软件系统可以提供多个外观不同的按钮〔如圆形按钮,矩形按钮等〕,这些按钮都源自同一个基类,不过在继承基类之后不同的子类修改了局部属性从而使得它们可以呈现不同的外观,如果我们希望在使用这些按钮时,不需要知道这些具体按钮类的名字,只需要知道表示该按钮的一个参数,并提供一个调用方便的方法,把该参数传入方法即可返回一个相应的按钮对象,此时,就可以使用简单工厂模式。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类。5.1简单工厂模式结构a、Factory〔工厂角色〕是简单工厂模式的核心,它负责实现创建所有具体产品类的实例。工厂类可以被外界直接调用,创建所需的产品对象。 b、Product〔抽象产品角色〕是所有具体产品角色的父类,它负责描述所有实例所共有的公共接口。c、ConcreteProduct〔具体产品角色〕继承自抽象产品角色,一般为多个,是简单工厂模式的创建目标。工厂类返回的都是该角色的某一具体产品。简单工厂模式实例:使用简单工厂模式设计一个可以创建不同几何形状〔如圆形、方形和三角形等〕的绘图工具,每个几何图形都要绘制draw〔〕和擦除erase〔〕两个方法,要求在绘制不支持的几何图形时,提示一个UnSupportedShapeException。代码分析Product〔Shape抽象类〕代码:import;import;publicabstractclassAbstractShape{staticGraphicsg;publicabstractvoiddraw(JPanelp);publicabstractJPanelerase(JPanelp);}分析:创建draw()和erase()方法供子类继承调用;ConcreteProduct〔Juxing,YuanXing,SanJiao具体产品类〕代码://各个产品类代码类似、需要添加产品类时只需要另外创建一个类然后再修改工厂类少量代码即可JuXing类:import;//绘制矩形publicclassJuXingextendsAbstractShape{privateJPanelp;Overridepublicvoiddraw(JPanelp){//TODOAuto-generatedmethodstubthis.p=p;//g.drawrect(50,50,100,50); }OverridepublicJPanelerase(JPanelp){p.repaint();//TODOAuto-generatedmethodstubreturnp; }}YuanXing类:import;//绘制圆形publicclassYuanXingextendsAbstractShape{privateJPanelp;Overridepublicvoiddraw(JPanelp){//TODOAuto-generatedmethodstubthis.p=p;//g.drawOval(50,50,50,50); }OverridepublicJPanelerase(JPanelp){p.repaint();//TODOAuto-generatedmethodstubreturnp; }}SanJiao类:import;//绘制三角形publicclassSanJiaoextendsAbstractShape{privateJPanelp;Overridepublicvoiddraw(JPanelp){//TODOAuto-generatedmethodstubthis.p=p;//intx[]={130,100,200}inty[]={130,200,200};g.drawPolygon(x,y,3); }OverridepublicJPanelerase(JPanelp){p.repaint();//TODOAuto-generatedmethodstubreturnp; }}Factory(Factory类)代码:publicclassFactory{publicstaticAbstractShapecreatShape(Strings)throwsException{if(s.equalsIgnoreCase("矩形")){returnnewJuXing(); }elseif(s.equalsIgnoreCase("圆形")){returnnewYuanXing(); }elseif(s.equalsIgnoreCase("三角形")){returnnewSanJiao(); }else{thrownewException("UnSupportedShapeException"); } }}//注释:用于创建各个具体产品角色的对象;(main类):创建一个窗体,添加控件和监听代码如下:import.*;import.*;import;import;publicclassShapeFrameextendsJFrameimplementsActionListener{JPanelcontentPane=newJPanel();JPanelupPane=newJPanel();JPanelcenterPane=newJPanel();StringshapeStr[]={"圆形","矩形","三角形"};oBoxcmb=newoBox(shapeStr);JLabellab=newJLabel("选择目标图形:");uttondrawBtu=newutton("绘制");uttoneraseBtu=newutton("擦除");Shapeshape;ShapeFrame(Stringtitle){super(title);setSize(800,600);setLocationRelativeTo(null);addPane();setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}voidaddPane(){setContentPane(contentPane);contentPane.setLayout(newBorderLayout());contentPane.setBackground(Color.white);upPane.setBackground(Color.white);centerPane.setBackground(Color.white);contentPane.add(upPane,BorderLayout.NORTH);contentPane.add(centerPane,BorderLayout.CENTER);initWidget();upPane.add(lab);upPane.add(cmb);upPane.add(drawBtu);upPane.add(eraseBtu);}voidinitWidget(){drawBtu.addActionListener(this);eraseBtu.addActionListener(this);}//关键代码OverridepublicvoidactionPerformed(ActionEvente){Objectobject=e.getSource();if(object.equals(drawBtu)){StringshapeName=cmb.getSelectedItem().toString();try{shape=ShapeFactory.creatShape(shapeName);shape.draw(centerPane);}catch(Exceptionerror){error.printStackTrace();}}elseif(object.equals(eraseBtu)){if(shape!=null){JPanelnewPanel=shape.erase(centerPane);contentPane.add(newPanel,BorderLayout.CENTER);repaint();shape=null;}}

温馨提示

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

评论

0/150

提交评论