版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 JuXing();else i
10、f(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.
11、ActionListener;public class ShapeFrame extends JFrame implements ActionListener 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 =
12、 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(); co
13、ntentPane.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
14、 initWidget() drawBtu.addActionListener(this); eraseBtu.addActionListener(this); /关键代码 Override public void actionPerformed(ActionEvent e) Object object = e.getSource(); if (object.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年南京工业职业技术大学单招职业倾向性测试题库带答案详解(突破训练)
- 2026年六盘水幼儿师范高等专科学校单招职业适应性测试题库含答案详解(黄金题型)
- 2026年南京机电职业技术学院单招职业倾向性测试题库含答案详解(预热题)
- 2026年南充电影工业职业学院单招职业适应性测试题库含答案详解
- 2026年南阳科技职业学院单招职业技能测试题库含答案详解(满分必刷)
- 2026年南京科技职业学院单招综合素质考试题库及答案详解(网校专用)
- 2026年南通职业大学单招职业适应性测试题库含答案详解(考试直接用)
- 2025-2026学年自导式教学设计
- 2026年六安职业技术学院单招职业适应性测试题库附参考答案详解(模拟题)
- 2026年山东潍坊市高三一模高考生物模拟试卷(含答案详解)
- 高一下学期返校收心归位主题班会课件
- 2026年工程质量安全管理试题及答案
- 北京市朝阳区2025-2026学年高三上学期期末质量检测语文试卷及参考答案
- 2026年春季人教版小学数学三年级下册教学计划(含进度表)
- 长郡中学2026届高三月考试卷(六)物理+答案
- 建筑企业节后工地复工安全课件
- 山东济南市2025-2026学年秋季学期高一期末考试英语试题(试卷+解析)
- 如何建立健全的建筑企业管理体系
- 昆明医科大学第二附属医院进修医师申请表
- 二十五项反措检查表
评论
0/150
提交评论