一、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工厂设计模式,代码详细有注释,可以直接在MyEclipse运行。欢迎下载使用
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 ...
java 创建型模式--工厂模式(Factory Pattern)示范代码demo,关于工厂模式可以查看我的博客 http://blog.csdn.net/u012930316/article/details/54599580
Factory Method Pattern 工厂三兄弟之工厂方法模式(一) 工厂三兄弟之工厂方法模式(二) 工厂三兄弟之工厂方法模式(三) 工厂三兄弟之工厂方法模式(四) 抽象工厂模式-Abstract Factory Pattern 工厂三兄弟之...
工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 2. 结构型模式 适配器模式(Adapter ...
今天,我要为大家介绍的是Java中的抽象工厂模式,这是一种非常实用的设计模式,让我们一起来探索它的魅力吧! 内容概要 本文将从以下几个方面详细介绍Java抽象工厂模式: 抽象工厂模式的应用场景。 抽象工厂模式...
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....
工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 2 结构型模式 这些设计模式关注类和对象的...
计算器 使用Command Factory Pattern和依赖项注入的Java控制台应用程序
工厂模式属于类的创建模式,工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,而不必事先知道每次要实例化哪一个类。此工程是对java工厂模式的实现
5、工厂方法模式FACTORY METHOD PATTERN 6、抽象工厂模式ABSTRACT FACTORY PATTERN 7、门面模式FACADE PATTERN 8、适配器模式ADAPTER PATTERN 9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER ...
CoreJava-DesignPattern 创意设计模式 -- Abstract Factory - Done -- Builder - Done -- Factory Method -- Object Pool -- Prototype - Done -- Singleton - Done 结构设计模式 -- Adapter -- Bridge -- ...
获取到【文件夹】名称: abstract_factory_pattern 获取到【文件夹】名称: adapter_pattern 获取到【文件夹】名称: bridge_pattern 获取到【文件夹】名称: build_pattern 获取到【文件夹】名称: chain_of_...
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个...
Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1...
工厂方法模式【FACTORY METHOD PATTERN】 抽象工厂模式【ABSTRACT FACTORY PATTERN】 门面模式【FACADE PATTERN】 适配器模式【ADAPTER PATTERN】 模板方法模式【TEMPLATE METHOD PATTERN】 建造...
对比了 工厂类 factory pattern 和 simple factory pattern
java 设计模式 bridge CommandPattern factoryMethod simpleFactory
设计模式-适配器-工厂-命令-备忘录Java中的Adapter&Factory&Command&Memento设计模式GoodHealth Fitness Corporation 是一家大型健身俱乐部。 它提供最先进的设备供其成员使用。 公司维护一个会员系统,用于记录会员...
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" } 下载 构建状态 当您有一系列命令序列时,每...