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;
//1. Abstract Factory模式
SAXParserFactory spf = SAXParserFactory.newInstance ();
String validation = System.getProperty (
"javax.xml.parsers.validation", "false");
if (validation.equalsIgnoreCase("true"))
spf.setValidating (true);
//2. Factory模式
SAXParser sp = spf.newSAXParser ();
parser = sp.getParser ();
parser.setDocumentHandler (this);
parser.parse (uri); 网管下载dl.bitscn.com
....
1. 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;
中国网管论坛bbs.bitsCN.com
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;
}
2. newSAXParser()方法在SAXParserFactory定义为抽象方法,
SAXParserFactoryImpl继承了SAXParserFactory,它实现了方法newSAXParser():
public SAXParser newSAXParser() throws SAXException,
ParserConfigurationException
{
SAXParserImpl saxParserImpl = new SAXParserImpl (this);
return saxParserImpl;
}
注意: 网管下载dl.bitscn.com
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的类关系图如下
【转自www.bitsCN.com】
分享到:
相关推荐
Java设计模式是面向对象编程...在阅读《Chapter1___Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)》的相关资料时,你可以更深入地学习这些模式的细节,包括适用场景、优缺点以及如何在实际项目中实现。
Abstract Factory模式的核心在于抽象工厂(Abstract Factory)和具体工厂(Concrete Factory)。抽象工厂定义了一个用于创建一系列相关或相互依赖对象的接口,而具体工厂则实现了这些接口,负责生产实际的对象。这种...
总的来说,Abstract Factory模式在本文中的应用展示了如何通过接口和工厂类来管理复杂对象的创建,使得代码更加模块化,易于维护和扩展。在设计角色系统时,这样的设计模式能够确保每个角色具备其种族特有的属性,...
1. 抽象工厂(Abstract Factory):这是模式的核心,它是一个接口或抽象类,定义了一系列创建对象的方法,但并不直接实例化具体的对象。这些方法用于创建一系列相关或相互依赖的对象。 2. 具体工厂(Concrete ...
Abstract Factory模式 1 定义创建对象的接口,并封装对象的创建 2 将具体化类的工作延迟到了类中 3 创建创建一组相关对象或者说是一组相互依赖的对象 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来...
在这个例子中,`AbstractProductA`和`AbstractProductB`是抽象产品,`ConcreteProductA1/A2`和`ConcreteProductB1/B2`是具体产品,`AbstractFactory`是抽象工厂,`ConcreteFactory1/2`是具体工厂。客户端代码通过...
1. 抽象工厂(Abstract Factory):这是模式的核心,定义了一组创建对象的接口,客户端通过这个接口请求创建所需的产品。这个接口不直接创建产品,而是将产品创建的职责委托给具体工厂。 2. 具体工厂(Concrete ...
总的来说,Factory模式和AbstractFactory模式是面向对象设计中的重要工具,它们帮助开发者更好地管理对象的创建,提高代码的可扩展性和可维护性,是C++程序员必备的设计知识。在实际项目中,灵活运用这些模式,可以...
总的来说,AbstractFactory模式在C++中的实现充分利用了面向对象的特性,如抽象类、继承和多态,使得系统具有更好的灵活性和扩展性。通过这种方式,我们可以轻松地替换或增加新的产品族,而不会对原有代码造成太大的...
在“AbstractFactory案例代码”中,我们可能看到一个实现跨平台数据访问的例子,这里提到了支持SQLServer和Oracle两种数据库。这表明抽象工厂将用于创建与不同数据库交互的适配器或连接对象。在分层架构设计中,通常...
总的来说,理解并熟练运用Abstract Factory模式能够帮助开发者编写更加灵活和易于维护的代码,尤其在处理跨平台或者多变的组件需求时。在C#中,通过接口和抽象类来实现这一模式,可以充分利用语言特性,实现良好的...
设计模式抽象工厂模式(AbstractFactory)源代码
Factory模式通常分为简单工厂(Simple Factory)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)三种主要类型。 1. **简单工厂**:这是最简单的形式,它包含一个静态方法,根据传入的参数返回特定类型...
public class WindowsFactory implements AbstractFactory { @Override public Button createButton() { return new WindowsButton(); } @Override public Window createWindow() { return new ...
在软件设计模式中,工厂方法(Factory Method)和抽象工厂(Abstract Factory)是两种非常重要的创建型模式。它们主要用于解决对象实例化的问题,提供了一种封装对象创建过程的方法,使得代码更加灵活,易于扩展和...
在给定的压缩包文件中,"AbstractFactory"可能包含了一些示例代码或者实现,用来解释抽象工厂模式的具体应用。这些代码可能包括抽象工厂接口、具体工厂类以及抽象产品和具体产品的定义。通过查看这些代码,我们可以...
### 抽象工厂模式(Abstract Factory Pattern) #### 引入 在探讨抽象工厂模式之前,我们先回顾一下之前介绍过的简单工厂模式与工厂方法模式。这两种模式主要关注于解决对象创建过程中“new”操作的问题,使得创建...
1. **抽象工厂接口(Abstract Factory)**:定义了一系列产品的创建方法,例如`NWFactory`可能是这个抽象工厂的实现,它包含了创建人和动物的方法。 2. **具体工厂类(Concrete Factory)**:实现了抽象工厂接口,...
总之,"设计模式 t03AbstractFactory"的主题是介绍和实践抽象工厂模式,帮助开发者理解如何通过抽象工厂来管理不同环境下的对象创建,提高代码的可维护性和可扩展性。通过学习这个模式,开发者能够更好地应对多平台...
public class WindowsFactory implements AbstractFactory { @Override public Button createButton() { return new WindowsButton(); } @Override public Dialog createDialog() { return new Windows...