`
flyPig
  • 浏览: 139922 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Java中的Factory pattern

阅读更多
一、Simple Factory
简单工厂模式的一般结构图:

其中,AbstractProduct既可以是Interface也可以是Abstract class.
1.如果把AbstractProduct和ConcreteProduct合并,也就是没有AbstractProduct,那就是最简单的工厂应用,比如swing里面的UIManager.
LookAndFeel defaultLookAndFeel = UIManager.getLookAndFeel();


2.如果把Factory和AbstractProduct合并,由AbstractProduct做两者的事情,那就像DateFormat和SimpleDatFormat.

可以看到Abstract class DateFormat自己就提供了static的方法去获取各种类型的DateFormat实现类,其中就包括SimpleDateFormat.

3.如果来个三合一呢,那就是自己能产生自己的对象,Java里面的Boolean类的valueOf方法就很像这样的效果。
Boolean temp = Boolean.valueOf(true);


4.如果是三个因素一个都不少呢,concurrent包里面就有现成的案例


优点:
由Factory决定在什么情况下创建哪一种产品类的实例,而使用者则可以免除直接创建产品对象的责任,而仅仅是“消费”产品。

缺点:
对于Factory来说,增加新的产品需要新写一个产品类ConcreteProductB,就需要去修改Factory的具体实现。
SimpleFactory使用static方法作为工厂方法,而static方法无法由子类继承,因此Factory无法形成基于继承的等级结构。

二、Factory Method
其实它就是多态性的Factory.把产生对象的具体动作,下放给具体Factory去执行。

这样做的好处就是:如果需要增加另外的产品比如ConcreteProductC,就仅仅只需要增加对应的FactoryC就可以了。按照比较学术的词汇,就是在同一个产品等级结构内(AbstractProduct接口不变),可以增加任意的新产品(ConcreteProductC),而不需要去改动其他任何Factory(FactoryA FactoryB)代码。

三、Abstract Factory
如果需要对Product进行分类,也就是构造"产品族"这样的概念.

这个方式,增加新的产品族(ConcreteProductA3 ConcreteProductB3 Factory3)非常容易,不需要改变任何类,但是增加一个新的产品等级ProductC,就需要改动所有的Factory了,这是它的缺陷所在。

Factory Method和AbstractFactory在JDK中有个非常典型的应用,就是jaxp.
因为XML的解析器有好几种,jaxp良好的面向接口的设计,使得在不同的XML解析器之间切换,也不需要去改变代码。下面是一个随便写的XML解析过程。
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		DocumentBuilder db;
		try {
			db = dbf.newDocumentBuilder();
			Document doc = db.parse(new File(""));
			Element root = doc.getDocumentElement();
			NodeList valueNode = root.getElementsByTagName("value");
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

其中DocumentBuilderFactory,DocumentBuilder,Document,Element,Node等对象全部是abstract class.
1. DocumentBuilderFactory类就是图中AbstractFactory的角色,通过newInstance()方法创建了一个DocumentBuilderFactory子类,这就是1.2的SimpleFactory应用,而SimpleFactory其实就是FactoryMethod的简化方式。
2. 这个newInstance得出的DocumentBuilderFactory实例,也就是代码中的dbf,其实是一种XML解析器内的实现子类,dbf充当的是上图中的Factory1或者Factory2的角色
3. dbf调用newDocumentBuilder方法就相当于是Factory1调用createProductA方法,得到的db实例就是DocumentBuilder抽象类子特定XML解析器中的实现类实例。

  • 大小: 12.3 KB
  • 大小: 6.5 KB
  • 大小: 7.7 KB
  • 大小: 4.7 KB
  • 大小: 15.7 KB
  • 大小: 28.3 KB
分享到:
评论

相关推荐

    通过java实现抽象工厂模式(Abstract Factory Pattern).rar

    在Java中,抽象工厂模式(Abstract Factory Pattern)同样是一种创建型设计模式,它允许在不指定具体类的情况下创建一系列相关或相互依赖的对象。压缩包文件代码是一个简单的Java实现示例,展示了如何使用抽象工厂...

    java-factory-design-pattern.zip_factory

    此外,MyEclipse是一款集成开发环境(IDE),它可以方便地运行和调试Java代码,因此在MyEclipse中直接运行提供的代码示例,可以帮助我们更好地理解和学习工厂设计模式的实践。 总结来说,Java工厂设计模式是软件...

    JAVA software design pattern

    Java软件设计模式是一种在开发过程中遵循的成熟、可重用的解决方案模板,它解决了软件设计中的常见问题。设计模式并不具体实现任何代码,而是提供了一种通用的语言,帮助开发者理解和交流复杂的系统架构。以下是关于...

    设计模式之“工厂方法模式[Factory Method Pattern]”

    今天我们要探讨的是设计模式中的一个经典成员——工厂方法模式(Factory Method Pattern)。工厂方法模式是创建型设计模式的一种,它提供了一种创建对象的最佳方式。 ### 一、什么是工厂方法模式? 工厂方法模式...

    java设计模式详解,java design pattern

    在Java中,这些设计模式在很多地方有着广泛的应用,例如在JDK的源码中可以找到这些设计模式的例子。例如,享元模式就应用在Java中的Integer类中,用于缓存-128到127之间的整数对象。 了解这些设计模式有助于提高...

    designPattern-java.pdf

    ### 设计模式在Java中的应用 #### 设计模式概述与背景 设计模式是软件工程领域的一个重要概念,它提供了一套解决常见问题的有效方案。这些模式不仅能够帮助开发者编写更高质量、可维护性更强的代码,还能促进团队...

    JAVA design pattern-java设计模式

    在这个名为"JAVA design pattern-java设计模式"的CHM文件中,我们可能找到了关于如何在Java开发中应用设计模式的详细信息。 设计模式通常分为三大类:创建型、结构型和行为型。创建型模式关注对象的创建,如单例...

    why_factory_pattern.rar_factory

    在这个名为"why_factory_pattern.rar_factory"的压缩包文件中,我们可以预见到它包含的是对Java实现工厂模式的具体示例。 工厂模式的核心思想是定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪一个类...

    创建型模式--工厂模式(Factory Pattern)示范代码

    java 创建型模式--工厂模式(Factory Pattern)示范代码demo,关于工厂模式可以查看我的博客 http://blog.csdn.net/u012930316/article/details/54599580

    Design Pattern In Java.pdf

    - 抽象工厂模式(Abstract Factory Pattern):为一个产品家族提供一个接口,允许创建家族中的多个相关或依赖的对象。书中通过花园制造商的例子展示了抽象工厂的工作原理及其对用户界面的影响。 - 单例模式...

    【Java设计模式-源码】Factory Method Pattern in Java: 使用多态制造增强灵活性

    学习Java中的工厂方法模式,探索示例、用途、好处以及它如何增强代码的灵活性和可维护性。 **二、别名** * Virtual Constructor **三、Factory Method设计模式的意图** 使用工厂方法模式定义一个用于创建对象的...

    Professional.Java.EE.Design.Pattern

    - 工厂模式(Factory Pattern):这是一种创建对象的设计模式,它定义了创建对象的接口,但将实例化具体类的工作委托给子类。 - 装饰器模式(Decorator Pattern):允许向一个现有的对象添加新的功能,同时又不改变...

    design-pattern-java.pdf

    Factory Method Pattern 工厂三兄弟之工厂方法模式(一) 工厂三兄弟之工厂方法模式(二) 工厂三兄弟之工厂方法模式(三) 工厂三兄弟之工厂方法模式(四) 抽象工厂模式-Abstract Factory Pattern 工厂三兄弟之...

    factory&singlton pattern

    标题中的“factory&singleton pattern”指的是工厂模式和单例模式,这是两种常见的设计模式,在软件工程中被广泛使用,特别是对于对象的创建和管理。设计模式是解决常见问题的成熟方案,它们为软件开发提供了良好的...

    java 设计模式 java pattern

    在例子中,`Factory`是抽象工厂,`SimpleFactory`和`BombFactory`是具体工厂,它们分别创建`Sample`和`Sample2`的不同子类实例。 建造者模式(Builder Pattern)则将复杂对象的构建与其表示分离,使得同样的构建...

    java-pattern.rar

    "java-pattern.rar"这个压缩包文件包含了一个名为"pattern.ppt"的演示文稿,很可能详细介绍了Java中的各种设计模式。 设计模式分为三类:创建型、结构型和行为型。创建型模式涉及到对象的创建,如单例(Singleton)...

    liang-faan_JavaDesignPattern.pdf

    文档中还提到了其他一些行为型设计模式,如命令模式(Command Pattern)、解释器模式(Interpreter Pattern)、迭代器模式(Iterator Pattern)、中介者模式(Mediator Pattern)、备忘录模式(Memento Pattern)、...

    Software Architecture Design Pattern In Java

    2. **工厂模式(Factory Pattern)**: - 定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。 - 应用场景:当系统中有多个产品类时,可以通过工厂模式来动态地选择具体的产品实例。 3. **装饰器模式...

Global site tag (gtag.js) - Google Analytics