在讲XML解析的前面,我们来先学习一下简单工厂模式,因为这个模式对后面我们学习的XML解析是有关系的。
1. 回顾一下我们之前学过的设计模式:
单例设计模式
策略模式
动态代理模式
适配器模式 -- Adapter和Listener
观察者模式 [重要]
装饰者模式 [重要]
2. 简单工厂模式
1) 意图
简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出那一种产品类的实例。通常它根据自变量的不同返回不同的类的实例。
[举个例子:比如说有个代工厂,它的业务是代工笔记本电脑,如thinkpad,Dell,Apple等,只要客户需要thinkpad,则这个工厂就提供相应的产品(thinkpad)给他,这个客户自然也不用知道thinkpad是如何制作出来的,只要出来的产品是符合客户需要的就可以了,具体产品是如何创建的是由代工厂来决定的。这就是类似简单工厂模式]
2)适用性
简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建出哪一个产品类的实例。
3) 简单工厂模式的构成:
• 工厂类(Creator)角色: 担任这个角色的是简单工厂模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体类实现。[好比代工厂,是核心]
• 抽象产品(Product)角色:担任这个角色的类是简单工厂模式所创建的对象的父类,或它们共同拥有的接口。抽象产品角色可以用一个接口或者抽象类实现。[好比代工的产品,比如笔记本产品,是抽象的]
• 具体产品(Concrete Product)角色:简单工厂模式所创建的任何对象都是这个角色的实例,具体产品角色由一个具体类实现。[好比具体的笔记本产品,比如thinkpad,或者Dell等]
4) 实现自己的简单工厂模式
(1) 创建抽象产品角色:
package com.ahuier.simplefactory; /* * 抽象产品角色 * 好比如笔记本 */ public abstract class Product { }
(2)创建两个具体产品角色
package com.ahuier.simplefactory; /* * 具体产品角色(可能有多个) * 好比如 thinkpad笔记本 */ public class ConcreteProductA extends Product { }
package com.ahuier.simplefactory; /* * 具体产品角色(可能有多个) * 好比如 Dell笔记本 */ public class ConcreteProductB extends Product { }
(3) 创建工厂类角色
package com.ahuier.simplefactory; /* * 工厂类角色 * 通常工厂类里面的方法是定义成一个静态的方法 */ public class Creator { //根据外部传入的参数返回对应的实例,类似根据传入客户的需求(thinkpad 或者 Dell)返回对应的产品。 public static Product createProduct(String str){ //常量"A"最好写在比较表达式的前面 if("A".equals(str)){ return new ConcreteProductA(); //其实在这里需要完成的是一个复杂的逻辑 } if("B".equals(str)){ return new ConcreteProductB(); } return null; } }
(4)创建一个客户端
[编译执行结果]:com.ahuier.simplefactory.ConcreteProductA
package com.ahuier.simplefactory; /* * 客户端 * 好比如客户 */ public class Client { public static void main(String[] args) { /* * 这边作为客户端,创建类的实例是由工厂帮我们创建的。以前是用new的形式。 * 也就是把创建实例的责任推给了工厂,我们只是传给它参数它就返回对应的实例。 */ Product productA = Creator.createProduct("A"); System.out.println(productA.getClass().getName()); Product productB = Creator.createProduct("B"); System.out.println(productB.getClass().getName()); } }
com.ahuier.simplefactory.ConcreteProductB
下一讲我们就来讲解如何使用好简单工厂模式,也就是利用这种模式来进行XML解析。