nterval*1000);
}
}
现在还差一个部分,即把所有这些类和对象拼装起来的那个工厂方法,他被实现为一个简单的工厂:
var FeedManager = {
createFeedReader:function(conf){
var displayModule = new ListDisplay(conf.id+'-display',conf.parent);
Interface.ensureImplements(displayModule,DisplayModule);
var xhrHandler = xhrManager.createXhrHandler();
Interface.ensureImplements(xhrHandler,AjaxHandler);
return new FeedReader(displayModule,xhrHandler,conf);
}
}
使用API的程序员当然可以手工创建一个FeedReader对象,而不必借助FeedManager.createFeedReader方法,但是使用这个工厂方法,可以把FeedReader类所需要的复杂设置封装取来,并且可以确保其成员对象都实现了所需接口。
总结:
工厂模式主要用于消除对象间的耦合。通过使用工厂方法,而不是new关键字以及具体类,你可以把所有实例化代码集中在一个位置。
使用工厂模式,你可以先创建一个抽象的父类,然后在子类中创建工厂方法,从而把成员对象的实例化推迟到更专门化的子类中进行。
有人不禁把工厂方法当做万金油,把构造函数扔在一边。这并不值得提倡。
如果根本不可能另外换用一个类,或者不需要在运行期间在一系列可互换的类中进行选择,那就不应该使用工厂方法。
它主要用于所实例化的类型不能在开发期确定,而只能在运行期间确定的情况,此外,如果存在许多具有复杂的设置开销的相关对象,或者想创建一个包含了一些成员对象的类但是又想避免它们紧密的偶合在一起的话,就应该使用工厂模式。