您的位置:首页 > 其它

XML第十二讲:设计模式:简单工厂模式

2013-03-23 15:17 225 查看
    在讲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)创建一个客户端

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.ConcreteProductA

              com.ahuier.simplefactory.ConcreteProductB

下一讲我们就来讲解如何使用好简单工厂模式,也就是利用这种模式来进行XML解析。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: