`
flyPig
  • 浏览: 137017 次
  • 性别: 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-factory-design-pattern.zip_factory

    java工厂设计模式,代码详细有注释,可以直接在MyEclipse运行。欢迎下载使用

    Java.Design.Patterns.1537192353

    Java design patterns with the Simplest real world examples which are easy to understand & remember as well. Table of Contents PREFACE ABOUT DESIGN PATTERNS SINGLETON PATTERN FACTORY PATTERN ABSTRACT ...

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

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

    design-pattern-java.pdf

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

    用Java实现23种设计模式

    工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 2. 结构型模式 适配器模式(Adapter ...

    abstract-factory-pattern

    今天,我要为大家介绍的是Java中的抽象工厂模式,这是一种非常实用的设计模式,让我们一起来探索它的魅力吧! 内容概要 本文将从以下几个方面详细介绍Java抽象工厂模式: 抽象工厂模式的应用场景。 抽象工厂模式...

    《Java Design Patterns》高清完整英文PDF版

    Learn how to implement design patterns in Java: each pattern in Java Design Patterns is a complete implementation and the output is generated using Eclipse, making the code accessible to all....

    33种JAVA设计模式DEMO

    工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 2 结构型模式 这些设计模式关注类和对象的...

    Calculator:使用Command Factory Pattern的Java控制台应用程序

    计算器 使用Command Factory Pattern和依赖项注入的Java控制台应用程序

    why_factory_pattern.rar_factory

    工厂模式属于类的创建模式,工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,而不必事先知道每次要实例化哪一个类。此工程是对java工厂模式的实现

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    5、工厂方法模式FACTORY METHOD PATTERN 6、抽象工厂模式ABSTRACT FACTORY PATTERN 7、门面模式FACADE PATTERN 8、适配器模式ADAPTER PATTERN 9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER ...

    CoreJava-DesignPattern

    CoreJava-DesignPattern 创意设计模式 -- Abstract Factory - Done -- Builder - Done -- Factory Method -- Object Pool -- Prototype - Done -- Singleton - Done 结构设计模式 -- Adapter -- Bridge -- ...

    JAVA23种设计模式代码学习.zip

    获取到【文件夹】名称: abstract_factory_pattern 获取到【文件夹】名称: adapter_pattern 获取到【文件夹】名称: bridge_pattern 获取到【文件夹】名称: build_pattern 获取到【文件夹】名称: chain_of_...

    简单工厂模式

    工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个...

    Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式

    Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1...

    JAVA设计模式.rar

    工厂方法模式【FACTORY METHOD PATTERN】 抽象工厂模式【ABSTRACT FACTORY PATTERN】 门面模式【FACADE PATTERN】  适配器模式【ADAPTER PATTERN】  模板方法模式【TEMPLATE METHOD PATTERN】  建造...

    工厂类模型 应用

    对比了 工厂类 factory pattern 和 simple factory pattern

    java 设计模式

    java 设计模式 bridge CommandPattern factoryMethod simpleFactory

    Design-pattern-Adapter-Factory-Command-Memento:Java中的Adapter&Factory&Command&Memento设计模式

    设计模式-适配器-工厂-命令-备忘录Java中的Adapter&Factory&Command&Memento设计模式GoodHealth Fitness Corporation 是一家大型健身俱乐部。 它提供最先进的设备供其成员使用。 公司维护一个会员系统,用于记录会员...

    in-halter-pattern_factory-pattern:带有配置变体约定的Command及其CommandContext和CommandFactory概念验证

    compile "in.halter.pattern-api:in.halter.factory-pattern-api:1.0" // Implementation compile "in.halter.pattern-impl:in.halter.factory-pattern-impl:1.0" } 下载 构建状态 当您有一系列命令序列时,每...

Global site tag (gtag.js) - Google Analytics