工厂模式不仅仅是创建而已,他有自己的独特的存在意义。虽然目前看到的好处是,客户程序单元并不需要因为产品的改变而改变自己,其实工厂还可以提供诸如,反复返回同一实例的功能。
在平时我们的实际使用中,我们经常需要使用一个产品的循环和反复调用,这就要使得工厂不能每次都创建一个新的类出来,毕竟我们需要一些久的对象的数据。这里引入了登记式的工厂方法。工厂可以使用一个内部变量,来存储自己所维护的类的实例。
模式在现有成型系统中的应用的例子
简单工厂:Java 中的DateFormat类,就是一个抽象类,还是一个工厂类,他自己返回自己的实例。
public final static DateFormat getDateInstance();
public final static DateFormat getDateInstance(int style);
public final static DateFormat getDateInstance(int style, Locale locale);
工厂方法:URL 与URLConnection。 URL 继承 URLConnection。
URL yahoo = new URL("http://www.yahoo.com/");
URLConnection yc = yahoo.openConnection();
BufferedReader in = new BufferedReader(
new InputStreamReader(
yc.getInputStream()));
抽象工厂:抽象工厂模式的起源或者说最早的应用,是用于创建分属于不同操作系统的视窗构件。比如,命令按键(Button)与文字框(Text)都是视窗构件,在UNIX 操作系统的视窗环境和Windows 操作系统的视窗环境中,这两个构件有不同的本地实现,它们的细节也有所不同。按键产品和文字框产品都有各自的抽象类,而且还要有各自的在不同系统中的实现。于是抽象工厂就出现了。