设计模式简单工厂

发布时间:2021-08-20   来源:文档文库   
字号:
-

.
简单工厂设计模式
目录
1.1摘要2 2.1关键字2 3.1开发工具2
4.1简单工厂模式动机与定义:2 4.1.1模式动机2 4.1.2模式定义3 5.1简单工厂模式构造3 6.1简单工厂模式实例:4 6.1.1代码分析4
6.1.1.1ProductShape抽象类〕代码:4 6.1.1.2ConcreteProductJuxing,YuanXing,SanJiao具体产品类〕代码:5 JuXing类:5 YuanXing类:6 SanJiao类:6 6.1.1.3Factory(Factory代码:7 6.1.1.4 (main7 6.1.1.5运行结果:10 7.1结论10 8.1参考文献:10



- .word.zl.

-

.


1.1摘要
本文从面向对象的角度对java接口的概念、作用以及使用它的好处做分析,讲解面向接口编程的方法,结合初步接触软件开发的人员习惯,从简单工厂设计模式的概念和其构造以及用途进展解析,重点讲解简单工厂设计模式在软件开发过程中的作用和好处,通过一些实例来说明简单工厂设计模式的特点。

2.1关键字
面向对象;java接口;接口编程;简单工厂设计模式。
3.1开发工具
Eclipse java语言开发


4.1简单工厂模式动机与定义:
在实际的软件开发过程中有时需要创立一些来自于一样父类的类的实例,为此可以专门定义一个类来负责创立这些类的实例,这些被创立的实例具有共同的父类。在这种情况下,可以通过传入不同的参数从而获取不同的对象,理由Java语言的特征,习惯上将创立其他类实例的方法定义为static方法,外部不需要实例化这个类就可以直接调用该方法来获得需要的对象,该方法也成为静态工厂方法。
4.1.1模式动机
考虑一个简单的软件应用场景,一个软件系统可以提供多个外观不同的按钮〔如圆形按钮,矩形按钮等〕,这些按钮都源自同一个基类,不过在继承基类之后不同的子类修改了局部属- .word.zl.

-

.
性从而使得它们可以呈现不同的外观,如果我们希望在使用这些按钮时,不需要知道这些具体按钮类的名字,只需要知道表示该按钮的一个参数,并提供一个调用方便的方法,把该参数传入方法即可返回一个相应的按钮对象,此时,就可以使用简单工厂模式。

4.1.2模式定义
简单工厂模式专门定义一个类来负责创立其他类的实例,被创立的实例通常具有共同的父类。

5.1简单工厂模式构造

aFactory〔工厂角色〕
是简单工厂模式的核心,它负责实现创立所有具体产品类的实例。工厂类可以被外界直接调用,创立所需的产品对象。

bProduct〔抽象产品角色〕
是所有具体产品角色的父类,它负责描述所有实例所共有的公共接口。

cConcreteProduct〔具体产品角色〕
继承自抽象产品角色,一般为多个,是简单工厂模式的创立目标。工厂类返回的都是该角色的某一具体产品。
- .word.zl.

-

.


6.1简单工厂模式实例:
使用简单工厂模式设计一个可以创立不同几何形状〔如圆形、方形和三角形等〕绘图工具,每个几何图形都要绘制draw〔〕和擦除erase〔〕两个方法,要求在绘制不支持的几何图形时,提示一个UnSupportedShapeException



6.1.1代码分析
6.1.1.1ProductShape抽象类〕代码:
import java.awt.Graphics; - .word.zl.

-

.

import javax.swing.JPanel;
publicabstractclass AbstractShape { static Graphics g; publicabstractvoid draw(JPanel p;
publicabstract JPanel erase(JPanel p;
} 分析:创立draw(erase(方法供子类继承调用;

6.1.1.2ConcreteProductJuxing,YuanXing,SanJiao具体产品类〕代码:
//各个产品类代码类似、需要添加产品类时只需要另外创立一个类然后再修改工厂类少量代码即可
JuXing类:
import javax.swing.JPanel; //绘制矩形
publicclass JuXing extends AbstractShape { private JPanel p; Override
publicvoid 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 returnp;

- .word.zl.
}
}
-

.
}


YuanXing类:
import javax.swing.JPanel; //绘制圆形
publicclass YuanXing extends AbstractShape { private JPanel p; Override
publicvoid 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 returnp; }
}

SanJiao类:
import javax.swing.JPanel; //绘制三角形
publicclass SanJiao extends AbstractShape { private JPanel p; Override
publicvoid draw(JPanel p { // TODO Auto-generated method stub this.p=p;//
- .word.zl.

-

.
intx[]={130,100,200} inty[]={130,200,200}; g.drawPolygon(x, y, 3; } Override
public JPanel erase(JPanel p {
p.repaint(; // TODO Auto-generated method stub returnp;
}
}

6.1.1.3Factory(Factory代码:
publicclass Factory { publicstaticAbstractShape creatShape(String s throws Exception{ if(s.equalsIgnoreCase("矩形"{ returnnew JuXing(;

} elseif(s.equalsIgnoreCase("圆形"{ returnnew YuanXing(;

} elseif(s.equalsIgnoreCase("三角形"{ returnnew SanJiao(;

} else { thrownew Exception("UnSupportedShapeException";
}
}
} //注释:用于创立各个具体产品角色的对象;

6.1.1.4 (main
创立一个窗体,添加控件和监听
- .word.zl.

-

.
代码如下:
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;

publicclassShapeFrameextends JFrame implements ActionListener { JPanel contentPane = new JPanel(; JPanel upPane = new JPanel(; JPanel centerPane = new JPanel(;
String shapeStr[] = {"圆形","矩形","三角形"}; oBoxcmb = new oBox(shapeStr; JLabel lab = new JLabel("选择目标图形:"; utton drawBtu = new utton("绘制"; utton eraseBtu = new utton("擦除";
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; - .word.zl.

-

.
}
void initWidget( { drawBtu.addActionListener(this; eraseBtu.addActionListener(this; }
//关键代码 Override
publicvoid 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(;
} } elseif (object.equals(eraseBtu { if (shape != null { JPanel newPanel = shape.erase(centerPane; contentPane.add(newPanel, BorderLayout.CENTER; repaint(; shape = null; } } } } - .word.zl.

-

.
6.1.1.5运行结果:



7.1结论
简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创立哪一个产品类的实例。在实际运用中,由于可行的系统都是比拟复杂而且比拟庞大的系统,用到的设计模式都比拟复杂,而简单工厂设计模式是一个简单而且根底的设计模式,所以它会在较为复杂的设计模式中出现。作为刚刚接触软件开发的初级技术人员,有必要了解和学习最根底的设计模式,这样才能在以后开发大型软件使用设计模式时灵活而且用法丰富多彩。同时掌握根底的简单工厂设计模式有利于增强初学者对软件开发的认识和了解。
8.1参考文献:
1】伟,胡志刚,郭克华?设计模式?:清华大学 202110月第一版。

- .word.zl.

本文来源:https://www.2haoxitong.net/k/doc/e9b3d092ab8271fe910ef12d2af90242a995abe5.html

《设计模式简单工厂.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式