版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、简单工厂设计模式目录1.1摘要22.1关键字23.1开发工具24.1简单工厂模式动机与定义:24.1.1模式动机24.1.2模式定义25.1简单工厂模式结构36.1简单工厂模式实例:46.1.1代码分析46.1.1.1Product(Shape抽象类)代码:46.1.1.2ConcreteProduct(Juxing,YuanXing,SanJiao具体产品类)代码:5JuXing类:5YuanXing类:6SanJiao类:66.1.1.3Factory(Factory类)代码:76.1.1.4 (main类):76.1.1.5运行结果:107.1结论108.1参考文献:101.1摘要本文从
2、面向对象的角度对java接口的概念、作用以及使用它的好处做分析,讲解面向接口编程的方法,结合初步接触软件开发的人员习惯,从简单工厂设计模式的概念和其结构以及用途进行解析,重点讲解简单工厂设计模式在软件开发过程中的作用和好处,通过一些实例来说明简单工厂设计模式的特点。 2.1关键字面向对象;java接口;接口编程;简单工厂设计模式。3.1开发工具Eclipse java语言开发4.1简单工厂模式动机与定义:在实际的软件开发过程中有时需要创建一些来自于相同父类的类的实例,为此可以专门定义一个类来负责创建这些类的实例,这些被创建的实例具有共同的父类。在这种情况下,可以通过传入不同的参数从而获取不同的
3、对象,理由Java语言的特征,习惯上将创建其他类实例的方法定义为static方法,外部不需要实例化这个类就可以直接调用该方法来获得需要的对象,该方法也成为静态工厂方法。4.1.1模式动机考虑一个简单的软件应用场景,一个软件系统可以提供多个外观不同的按钮(如圆形按钮,矩形按钮等),这些按钮都源自同一个基类,不过在继承基类之后不同的子类修改了部分属性从而使得它们可以呈现不同的外观,如果我们希望在使用这些按钮时,不需要知道这些具体按钮类的名字,只需要知道表示该按钮的一个参数,并提供一个调用方便的方法,把该参数传入方法即可返回一个相应的按钮对象,此时,就可以使用简单工厂模式。4.1.2模式定义简单工厂
4、模式专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类。5.1简单工厂模式结构a、Factory(工厂角色)是简单工厂模式的核心,它负责实现创建所有具体产品类的实例。工厂类可以被外界直接调用,创建所需的产品对象。b、Product(抽象产品角色)是所有具体产品角色的父类,它负责描述所有实例所共有的公共接口。c、ConcreteProduct(具体产品角色)继承自抽象产品角色,一般为多个,是简单工厂模式的创建目标。工厂类返回的都是该角色的某一具体产品。6.1简单工厂模式实例:使用简单工厂模式设计一个可以创建不同几何形状(如圆形、方形和三角形等)的绘图工具,每个几何图形都要绘制d
5、raw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,提示一个UnSupportedShapeException。6.1.1代码分析6.1.1.1Product(Shape抽象类)代码:import java.awt.Graphics;import javax.swing.JPanel;public abstract class AbstractShape static Graphics g;public abstract void draw(JPanel p);public abstract JPanel erase(JPanel p);分析:创建draw()和erase()
6、方法供子类继承调用;6.1.1.2ConcreteProduct(Juxing,YuanXing,SanJiao具体产品类)代码:/各个产品类代码类似、需要添加产品类时只需要另外创建一个类然后再修改工厂类少量代码即可JuXing类:import javax.swing.JPanel;/绘制矩形public class JuXing extends AbstractShape private JPanel p; Overridepublic void draw(JPanel p) / TODO Auto-generated method stubthis.p=p;/g.drawrect(50,
7、50, 100, 50);Overridepublic JPanel erase(JPanel p) p.repaint();/ TODO Auto-generated method stubreturn p;YuanXing类:import javax.swing.JPanel;/绘制圆形public class YuanXing extends AbstractShape private JPanel p; Overridepublic void draw(JPanel p) / TODO Auto-generated method stubthis.p=p;/g.drawOval(50,
8、 50, 50, 50);Overridepublic JPanel erase(JPanel p) p.repaint();/ TODO Auto-generated method stubreturn p;SanJiao类:import javax.swing.JPanel;/绘制三角形public class SanJiao extends AbstractShape private JPanel p; Overridepublic void draw(JPanel p) / TODO Auto-generated method stubthis.p=p;/int x=130,100,2
9、00 int y=130,200,200;g.drawPolygon(x, y, 3);Overridepublic JPanel erase(JPanel p) p.repaint();/ TODO Auto-generated method stubreturn p;6.1.1.3Factory(Factory类)代码:public class Factory public static AbstractShape creatShape(String s) throws Exceptionif(s.equalsIgnoreCase("矩形")return new JuX
10、ing();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 j
11、ava.awt.event.ActionEvent;import java.awt.event.ActionListener;public class ShapeFrame extends JFrame implements ActionListener JPanel contentPane = new JPanel(); JPanel upPane = new JPanel(); JPanel centerPane = new JPanel(); String shapeStr = "圆形","矩形","三角形" JComboBox
12、 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(); setDefaultCloseOp
13、eration(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(centerPan
14、e,BorderLayout.CENTER); initWidget(); upPane.add(lab); upPane.add(cmb); upPane.add(drawBtu); upPane.add(eraseBtu); void initWidget() drawBtu.addActionListener(this); eraseBtu.addActionListener(this); /关键代码 Override public void actionPerformed(ActionEvent e) Object object = e.getSource(); if (object.
15、equals(drawBtu) String shapeName = cmb.getSelectedItem().toString(); try shape = 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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年电力工程施工行业分析报告及未来五至十年竞争格局分析
- 2026下半年初中地理教资面试地理实验题库
- 2027中国石化秋季校园招聘笔试备考试题及答案解析
- 2026年井冈山市专业森林消防大队招聘笔试备考试题及答案解析
- 2026安徽省国资委组织国有企业为高校毕业生开发见习岗位笔试备考试题及答案解析
- 2026四川天府银行零售金融部社会招聘笔试模拟试题及答案解析
- 中国人民保险集团2027届校园招聘考试备考题库及答案解析
- 2026黑龙江省林口林业局有限公司公开招聘8人考试备考题库及答案解析
- 2026年安远县教师招聘笔试模拟试题及答案解析
- 2026年滁州天长市金牛湖万兽山景区招聘第三批工作人员30名笔试模拟试题及答案解析
- 2026高考议论文范文19篇(完整版含真题立意+考场高分作文)
- 2026-2027学年苏教版(新教材)小学科学五年级上册(全册)知识点清单
- 2026年湖南省中考历史试卷(含答案)
- 《演唱 郊游》课件2025-2026学年冀少版三年级下册音乐
- 《计算机程序设计员》教学大纲-初中级
- 500kV变压器保护及并联电抗器保护技术规范
- 两办意见、《条例》、八项硬措施、治本攻坚三年行动方案学习课件
- 同济大学浙江学院《免疫学及病原生物学》2023-2024学年第一学期期末试卷
- 设备部工作规划
- 提高有风险患者预防跌倒坠床护理措施落实率品管圈PDCA案例汇报
- 国内外设施园艺产业状况和发展教学课件
评论
0/150
提交评论