设计模式简单工厂_第1页
设计模式简单工厂_第2页
设计模式简单工厂_第3页
免费预览已结束,剩余15页可下载查看

下载本文档

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

文档简介

简单工厂设计模式目录1.1 摘要22.1 关键字23.1 开发工具24.1 简单工厂模式动机与定义:34.1.1 模式动机34.1.2 模式定义35.1 简单工厂模式结构46.1 简单工厂模式实例:56.1.1 代码分析66.1.1.1product(shape 抽象类)代码:.66.1.1.2concreteproduct(juxing,yuanxing,sanjiao具体产品类)代码:7juxing 类: .7yuanxing类: .8sanjiao类: .96.1.1.3factory(factory类)代码: .116.1.1.4 (main类): .126.1.1.5运行结果:.167.1 结论16-可编辑修改 -8.1 参考文献:171.1摘要本文从面向对象的角度对java 接口的概念、作用以及使用它的好处做分析,讲解面向接口编程的方法, 结合初步接触软件开发的人员习惯,从简单工厂设计模式的概念和其结构以及用途进行解析,重点讲解简单工厂设计模式在软件开发过程中的作用和好处,通过一些实例来说明简单工厂设计模式的特点。2.1关键字面向对象; java 接口;接口编程;简单工厂设计模式。3.1开发工具eclipse java语言开发4.1 简单工厂模式动机与定义:在实际的软件开发过程中有时需要创建一些来自于相同父类的类的实例,为此可以专门定义一个类来负责创建这些类的实例,这些被创建的实例具有共同的父类。在这种情况下,可以通过传入不同的参数从而获取不同的对象,理由java 语言的特征,习惯上将创建其他类实例的方法定义为static 方法,外部不需要实例化这个类就可以直接调用该方法来获得需要的对象,该方法也成为静态工厂方法。4.1.1 模式动机考虑一个简单的软件应用场景,一个软件系统可以提供多个外观不同的按钮(如圆形按钮, 矩形按钮等) ,这些按钮都源自同一个基类,不过在继承基类之后不同的子类修改了部分属性从而使得它们可以呈现不同的外观,如果我们希望在使用这些按钮时,不需要知道这些具体按钮类的名字,只需要知道表示该按钮的一个参数,并提供一个调用方便的方法,把该参数传入方法即可返回一个相应的按钮对象,此时,就可以使用简单工厂模式。4.1.2 模式定义简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类。5.1简单工厂模式结构a、factory (工厂角色)是简单工厂模式的核心,它负责实现创建所有具体产品类的实例。工厂类可以被外界直接调用,创建所需的产品对象。b、product (抽象产品角色)是所有具体产品角色的父类,它负责描述所有实例所共有的公共接口。c、concreteproduct(具体产品角色)继承自抽象产品角色,一般为多个, 是简单工厂模式的创建目标。工厂类返回的都是该角色的某一具体产品。6.1 简单工厂模式实例:使用简单工厂模式设计一个可以创建不同几何形状(如圆形、 方形和三角形等)的绘图工具,每个几何图形都要绘制draw ()和擦除erase ()两个方法,要求在绘制不支持的几何图形时,提示一个unsupportedshapeexception。6.1.1 代码分析6.1.1.1 product ( shape抽象类)代码:import java.awt.graphics;import javax.swing.jpanel;public abstractclass abstractshape static graphicsg;publicabstractvoid draw(jpanel p);publicabstractjpanel erase(jpanel p);分析:创建 draw() 和erase() 方法供子类继承调用;6.1.1.2 concreteproduct( juxing,yuanxing,sanjiao具体产品类) 代码:/各个产品类代码类似、需要添加产品类时只需要另外创建一个类然后再修改工厂类少量代码即可juxing 类:import javax.swing.jpanel;/ 绘制矩形public class juxingextendsabstractshape private jpanel p;overridepublic void draw(jpanel p) / todoauto-generated method stubthis .p=p;/g.drawrect(50, 50, 100, 50);overridepublic jpanel erase(jpanel p) p.repaint();/ todoauto-generated method stubreturn p;yuanxing类:import javax.swing.jpanel;/ 绘制圆形public class yuanxingextendsabstractshape private jpanel p;overridepublic void draw(jpanel p) / todoauto-generated method stubthis .p=p;/g.drawoval(50, 50, 50, 50);overridepublic jpanel erase(jpanel p) p.repaint();/ todoauto-generated method stubreturn p;sanjiao类:import javax.swing.jpanel;/ 绘制三角形public class sanjiaoextendsabstractshape private jpanel p;overridepublic void draw(jpanel p) / todoauto-generated method stubthis .p=p;/int x=130,100,200int y=130,200,200;g.drawpolygon(x, y, 3); overridepublic jpanel erase(jpanel p) p.repaint();/ todoauto-generated method stubreturn p;6.1.1.3 factory(factory类)代码:public class factory public static abstractshape creatshape(string s)throwsexceptionif(s.equalsignorecase(矩形 ) return new juxing();else if (s.equalsignorecase(圆形 ) return new yuanxing();else if (s.equalsignorecase(三角形 ) return new sanjiao();else throw new exception(unsupportedshapeexception);/注释:用于创建各个具体产品角色的对象;6.1.1.4 (main类):创建一个窗体,添加控件和监听代码如下:import javax.swing.*;import java.awt.*;import java.awt.event.actionevent;import java.awt.event.actionlistener;public class shapeframeextendsjframeimplementsactionlistener jpanel contentpane =new jpanel();jpanel uppane =new jpanel();jpanel centerpane =new jpanel();string shapestr = 圆形 ,矩形 , 三角形 ;jcombobox cmb =new jcombobox(shapestr);jlabel lab =new jlabel( 选择目标图形:); jbutton drawbtu =new jbutton( 绘 制 ); jbutton erasebtu =new jbutton( 擦 除 );shape shape;shapeframe(string title) super (title);setsize(800,600);setlocationrelativeto(null );addpane();setdefaultcloseoperation(jframe.exit_on_close );void addpane() setcontentpane(contentpane);contentpane.setlayout(new borderlayout();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);void initwidget() drawbtu.addactionlistener(this );erasebtu.addactionlistener(this );/ 关键代码overridepublic void actionperformed(actionevent e) object object = e.getsource();if (object.equals(drawbtu) string shapename = cmb.getselecteditem().tostring();tryshape = shapefactory.creatshape (shapename); shape.draw(centerpane);catch (exception error)error.printstacktrace(); else if (object.equals(erasebtu) if (shape !=null ) jpanel newpanel = shape.erase(centerpane);contentpane.add(newpanel, borderlayout.center ); repaint();shape =null ;6.1.1.5 运行结果:7.1结论简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类 的实例。 在实际运用中, 由于可行的系统都是比较复杂而且比较庞大的系统,用到的

温馨提示

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

评论

0/150

提交评论