标签:style blog http java 使用 io 2014 ar
1、工厂方法模式中的角色:
工厂方法模式的客户端对抽象工厂类、抽象产品进行编程,也就是应该针对抽象编程,而不应该是针对具体工厂类及具体产品编程。
从上图可以看出,这个使用了工厂方法模式的系统涉及到以下的角色:
(1)、抽象工厂(Creator)角色:担任这个角色的是工厂方法模式的核心,它是与应用程序无关的。任何在模式中创建对象的工厂类必须实现这个接口。在上面的系统
中这个角色由Java 接口Creator 扮演;在实际的系统中,这个角色也常常使用抽
象Java 类实现。
(2)、具体工厂(Concrete Creator)角色:担任这个角色的是实现了抽象工厂接口的具体Java 类。具体工厂角色含有与应用密切相关的逻辑,并且受到应用程序的调用
以创建产品对象。在本系统中给出了两个这样的角色,也就是具体Java 类
ConcreteCreator1 和ConcreteCreator2。
(3)、抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在本系统中,这个角色由Java 接口Product 扮
演;在实际的系统中,这个角色也常常使用抽象Java 类实现。
(4)、具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所声明的接口。工厂方法模式所创建的每一个对象都是某个具体产品角色的实例。
2、工厂模式简单示意图:
然后由相应的工厂角色创建相应的产品角色,工厂方法模式的应用如下图所示,图中的虚线代表创建(依赖)关系。
工厂方法模式并没有限制产品等级结构的层数。一般的书籍中都以两个层次为例,第
一层是抽象产品层,第二层是具体产品层。但是在实际的系统中,产品常常有更为复杂的
层次。
3、工厂方法模式时序图:
4、工厂方法模式在JAVA JDK中应用:
应用场景1:所有的Java 聚集都实现java.util.Collection 接口,这个接口规定所有的Java 聚集必须提供一个iterator()方法,返还一个Iterator 类型的对象,如下图所示。
一 个具体的Java 聚集对象会通过这个iterator()方法接口返还一个具体的Iterator 类。可以看出,这个iterator()方法就是一个工厂方法。
应用场景2:类似地,Java 的列是一种特殊的Java 聚集。所有的Java 除了实现了Collection 接口之外,还实现了一个List 接口。这个List 接口给出了两个工厂方法,一个是上面已经讨论过的iterator()方法,返还一个Iterator 类型的对象;另一个是listIterator()方法,返还一个ListIterator 类型的对象。
有趣的是,Iterator 和ListIterator 组成一个继承的等级结构,后者是前者的子接口。如下图所示。
应用场景3:URL 与URLConnection 中的应用,其实这个更像是简单工厂模式。
标签:style blog http java 使用 io 2014 ar
原文地址:http://www.cnblogs.com/ghpaas/p/3894343.html