工厂方法模式
代表作品1:
其中,Iterator()方法就是一个工厂方法,同时java.util.Collection是个抽象工厂(至少对iterator()方法),而且是根抽象工厂,其子抽象工厂有java.util.List等,具体工厂有ArrayList等。(当然他们同时也是容器,这和工厂的概念毫不相干)
代表作品2:
其中Iterator(),listIterator()方法是工厂方法,另外Iterator,ListIterator接口还涉及到迭代子模式
代表作品3:
图片来自:《java与模式》
写在最后:
体会有这么几个:温故而知新(其实我觉得是迭代学习);欲速则不达;无心插柳柳成荫
要不是我写博客需要回忆一下,就不会有现在的体会,比前两天体会深多了,以后看书就按照这个办法吧:
1.粗读
2.细读(复习,体会)
代表作品1:
代表作品2:
代表作品3:
package com.javapatterns.factorymethod.url;
import java.net.*;
import java.io.*;
public class URLConnectionReader
{
public static void main(String[] args) throws Exception
{
URL yahoo = new URL("http://www.yahoo.com/");
URLConnection yc = yahoo. openConnection();
BufferedReader in = new BufferedReader(
new InputStreamReader(
yc.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
}
}
URL类 使用了工厂方法模式,利用 openConnection()方法返回一个 URLConnection 类型的对象.
时序图:
据我猜测[guest]
1.在使用new URL("http://www.yahoo.com/");方法时,URL类就通过"协议"选择了合适的具体工厂用来创建具体的 URLConnection类...;(这点可能猜错了吧, 都 简单工厂模式了,不过嘛也可能不错,毕竟这样方便啊,URL类又不是专门来讲工厂方法的,在看下面的)
2.URLStreamHandler很肯能就是传说中的抽象工厂,通过方法:URL(String protocol, String host, int port, String file, URLStreamHandler handler)构造函数传入具体工厂。
3.从2中可以体现出工厂方法模式比简单工厂模式好的地方:当有新产品时,你不需要修改工厂方法- URLStreamHandler,只要再写个实现 URLStreamHandler的 具体工厂,如AHandler,并调用new URL(*,*, AHandler );方法把 具体工厂 AHandler放进去就可以了。此时在调用 openConnection()方法,嘿嘿,至此你的新产品就返回了
呵呵,只是猜测,希望对啊[quest-?]
注意:这个例子与上面两个不同,上面那两个例子中的Collection,List类本身分别就是第一级,第二级的抽象工厂,而本例说的是URL则是使用了工厂方法,它本身并不是 抽象工厂 [guest]。
import java.net.*;
import java.io.*;
public class URLConnectionReader
{
public static void main(String[] args) throws Exception
{
URL yahoo = new URL("http://www.yahoo.com/");
URLConnection yc = yahoo. openConnection();
BufferedReader in = new BufferedReader(
new InputStreamReader(
yc.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
}
}
URL类 使用了工厂方法模式,利用 openConnection()方法返回一个 URLConnection 类型的对象.
时序图:
据我猜测[guest]
1.在使用new URL("http://www.yahoo.com/");方法时,URL类就通过"协议"选择了合适的具体工厂用来创建具体的 URLConnection类...;(这点可能猜错了吧, 都 简单工厂模式了,不过嘛也可能不错,毕竟这样方便啊,URL类又不是专门来讲工厂方法的,在看下面的)
2.URLStreamHandler很肯能就是传说中的抽象工厂,通过方法:URL(String protocol, String host, int port, String file, URLStreamHandler handler)构造函数传入具体工厂。
3.从2中可以体现出工厂方法模式比简单工厂模式好的地方:当有新产品时,你不需要修改工厂方法- URLStreamHandler,只要再写个实现 URLStreamHandler的 具体工厂,如AHandler,并调用new URL(*,*, AHandler );方法把 具体工厂 AHandler放进去就可以了。此时在调用 openConnection()方法,嘿嘿,至此你的新产品就返回了
呵呵,只是猜测,希望对啊[quest-?]
注意:这个例子与上面两个不同,上面那两个例子中的Collection,List类本身分别就是第一级,第二级的抽象工厂,而本例说的是URL则是使用了工厂方法,它本身并不是 抽象工厂 [guest]。
写在最后:
体会有这么几个:温故而知新(其实我觉得是迭代学习);欲速则不达;无心插柳柳成荫
要不是我写博客需要回忆一下,就不会有现在的体会,比前两天体会深多了,以后看书就按照这个办法吧:
1.粗读
2.细读(复习,体会)