📄 factory.html
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<META name="description" content="Java,JDBC,EJB,Open Source,jdk,rmi">
<meta name="Keywords" content="Java, servlets, Java servlet, Javascript, ActiveX, VRML,
applet, applets, directory, news, jdbc, applications,
Java applications, Java developer, Java development, developer,
classes, Jars.com, Jars, intranet, Java applet, Javabeans,
Java products, JDK, Java development kit, java development environment, JIT,
JavaPlan, enterprise tools, JVM, Java Virtual Machine, Java resources,
SUN, CGI, Perl, database, network, html,
xml, dhtml, rating, ratings, review, jars, cgi, programming,
software review, software rating">
<title>csdn_Factory模式和Abstract Factory模式</title>
<style>
.news { BACKGROUND: #007cd3; font-family: "宋体"; font-size: 9pt }
.t { font-family: "宋体"; font-size: 9pt }
.t1 { color:#007cd3; font-family: "宋体"; font-size: 9pt }
.white { font-family: "宋体"; font-size: 9pt;color:#FFFFFF }
.red { font-family: "宋体"; font-size: 9pt;color:#FF0000 }
A {text-decoration: underline}
A:visited {color:#0000FF}
A:hover {color: #ff6666; text-decoration: none}
.text {font-size: 12px; line-height: 160%; font-family: "宋体"}
.text1 {color:#000000; font-size: 12px; line-height: 130%; font-family: "宋体"; text-decoration: none}
.text1:visited {color:#000000}
.text1:hover {color: #000000}
.text2 {color:#000000; font-size: 12px; line-height: 130%; font-family: "宋体"; text-decoration: none}
.text2:visited {color:#000000}
.text2:hover {color: #000000}
.text3 {font-size: 12px; line-height: 100%; font-family: "宋体"; text-decoration: none}
.large {font-size: 14.8px; line-height: 130%}
</style>
</head>
<body >
<!--start first table -->
<TR>
<TD WIDTH="20%" VALIGN="TOP">
<TR>
<TD WIDTH="20%" CLASS="t" BGCOLOR="#007cd3" align="Center"></TD>
<TR>
<TR>
<TD WIDTH="20%" CLASS="t" align="center" >
</TD>
<TR>
</td>
<TD WIDTH="100%" VALIGN="TOP" >
<TR>
<TD WIDTH="100%" CLASS="white"></TD>
<TR>
<TR>
<TD WIDTH="50%" bordercolor="#FFFFFF" CLASS="t1" bgcolor="#F0F0F0" nowrap >Factory模式和Abstract Factory模式
</TD>
<p> <TD WIDTH="50%" bordercolor="#FFFFFF" CLASS="t1" bgcolor="#F0F0F0" nowrap >作者:jdeveloper</p>
</TD>
<TR>
<TR>
<TD WIDTH="100%" bordercolor="#FFFFFF" CLASS="t" bgcolor="#F0F0F0" colspan=2>
<pre>
<font color="#FFAA00"> Java中的设计模式 (一) Factory模式和Abstract Factory模式 作者:jdeveloper </font>
Factory模式
利用给Factory对象传递不同的参数,以返回具有相同基类或实现了同一接口的对象。
Abstract Factory模式
先利用Factory模式返回Factory对象,在通过Factory对象返回不同的对象!
Java中的例子-----JAXP1.0.1 :
以下是用Simple API for XML(SAX) Parse XML文件的片段
...
String uri = "file:" + new File (xmlfilename).getAbsolutePath ();
Parser parser;
<font color=red> //1. Abstract Factory模式
SAXParserFactory spf = SAXParserFactory.newInstance ();</font>
String validation = System.getProperty (
"javax.xml.parsers.validation", "false");
if (validation.equalsIgnoreCase("true"))
spf.setValidating (true);
<font color=red>//2. Factory模式
SAXParser sp = spf.newSAXParser ();</font>
parser = sp.getParser ();
parser.setDocumentHandler (this);
parser.parse (uri);
....
<font color=red>1.</font> SAXParserFactory中的静态方法newInstance()根据系统属性javax.xml.parsers.SAXParserFactory不同的值
生成不同的SAXParserFactory对象spf。然后SAXParserFactory对象又利用方法newSAXParser()生成SAXParser对象。
注意:
SAXParserFactory 的定义为:
public abstract class SAXParserFactory extends java.lang.Object
SAXParserFactoryImpl 的定义为:
public class SAXParserFactoryImpl extends javax.xml.parsers.SAXParserFactory
public static SAXParserFactory newInstance() {
String factoryImplName = null;
try {
factoryImplName =
System.getProperty("javax.xml.parsers.SAXParserFactory",
"com.sun.xml.parser.SAXParserFactoryImpl");
}catch (SecurityException se) {
factoryImplName = "com.sun.xml.parser.SAXParserFactoryImpl";
}
SAXParserFactory factoryImpl;
try {
Class clazz = Class.forName(factoryImplName);
factoryImpl = (SAXParserFactory)clazz.newInstance();
}catch (ClassNotFoundException cnfe) {
throw new FactoryConfigurationError(cnfe);
} catch (IllegalAccessException iae) {
throw new FactoryConfigurationError(iae);
} catch (InstantiationException ie) {
throw new FactoryConfigurationError(ie);
}
return factoryImpl;
}
<font color=red>2.</font> newSAXParser()方法在SAXParserFactory定义为抽象方法,
SAXParserFactoryImpl继承了SAXParserFactory,它实现了方法newSAXParser():
public SAXParser newSAXParser() throws SAXException,
ParserConfigurationException
{
SAXParserImpl saxParserImpl = new SAXParserImpl (this);
return saxParserImpl;
}
注意:
SAXParserImpl的定义为:
public class SAXParserImpl extends javax.xml.parsers.SAXParser
SAXParserImpl的构造函数定义为:
SAXParserImpl (SAXParserFactory spf) throws SAXException,
ParserConfigurationException
{
super();
this.spf = spf;
if (spf.isValidating ()) {
parser = new ValidatingParser();
validating = true;
}
else {
parser = new Parser();
}
if (spf.isNamespaceAware ()) {
namespaceAware = true;
throw new ParserConfigurationException
("Namespace not supported by SAXParser");
}
}
本例子中用到的class和interface的类关系图如下
<img src="factory.bmp" >
</pre>
</TD>
<TR>
</TD>
</TR>
</center>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -