设计模式简单工厂
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
简单工厂设计模式
目录
1.1摘要 (2)
2.1关键字 (2)
3.1开发工具 (2)
4.1简单工厂模式动机与定义: (2)
4.1.1模式动机 (2)
4.1.2模式定义 (2)
5.1简单工厂模式结构 (3)
6.1简单工厂模式实例: (4)
6.1.1代码分析 (4)
6.1.1.1Product(Shape抽象类)代码: (4)
6.1.1.2ConcreteProduct(Juxing,YuanXing,SanJiao具体产品类)代码:5
JuXing类: (5)
YuanXing类: (6)
SanJiao类: (6)
6.1.1.3Factory(Factory类)代码: (7)
6.1.1.4 (main类): (7)
6.1.1.5运行结果: (10)
7.1结论 (10)
8.1参考文献: (10)
1.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.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.1.1.2ConcreteProduct(Juxing,YuanXing,SanJiao具体产品类)代码:
//各个产品类代码类似、需要添加产品类时只需要另外创建一个类然后再修改工厂类少量代码即可
JuXing类:
import javax.swing.JPanel;
//绘制矩形
public class JuXing extends AbstractShape {
private JPanel p;
Override
public void draw(JPanel p) {
// TODO Auto-generated method stub
this.p=p;//
g.drawrect(50, 50, 100, 50);
}
Override
public JPanel erase(JPanel p) {
p.repaint();
// TODO Auto-generated method stub
return p;
}
}
YuanXing类:
import javax.swing.JPanel;
//绘制圆形
public class YuanXing extends AbstractShape { private JPanel p;
Override
public void draw(JPanel p) {
// TODO Auto-generated method stub
this.p=p;//
g.drawOval(50, 50, 50, 50);
}
Override
public JPanel erase(JPanel p) {
p.repaint();
// TODO Auto-generated method stub
return p;
}
}
SanJiao类:
import javax.swing.JPanel;
//绘制三角形
public class SanJiao extends AbstractShape { private JPanel p;
Override
public void draw(JPanel p) {
// TODO Auto-generated method stub
this.p=p;//
int x[]={130,100,200}
int y[]={130,200,200};
g.drawPolygon(x, y, 3); }
Override
public JPanel erase(JPanel p) {