工厂模式定义:一个用于创建对象的接口,这个接口由子类决定实例化哪一个类。该模式使一个类的实例化延迟到了子类。而子类可以重写接口方法以便创建的时候指定自己的对象类型。
看不懂?没关系,先看看下面的例子。
var produceManager = {};
produceManager.createProduceA = function(){
console.log("ProduceA");
}
produceManager.createProduceB = function(){
console.log("ProduceB");
}
produceManager.factory = function(type){
return new produceManager[type];
}
var produce = produceManager.factory("createProduceA");
如果不好理解,我们举个实际一点的例子。假设我们要在一个页面上插入一些元素,但这些元素不确定,可能是图片,可能是链接,可能是文本。我们需要定义工厂类与子类(产品类)。
var page = page || {};
page.dom = page.dom || {};
//子函数:处理文本
page.dom.Text = function(){
this.insert = function(where){
var txt = document.createTextNode(this.url);
where.appendChild(txt);
};
};
//子函数:处理链接
page.dom.Link = function(){
this.insert = function(where){
var link = document.createElement("a");
link.href = this.url;
link.appendChild(document.createTextNode(this.url));
where.appendChild(link);
};
};
//子函数:处理图片
page.dom.Image = function(){
this.insert = function(where){
var im = document.createElement("img");
im.src = this.url;
where.appendChild(im);
};
};
//工厂
page.dom.factory = function(type){
return new page.dom[type];
};
//test:
var o = page.dom.factory("Link");
o.url = "http://abc.com";
o.insert(document.body);
再读读这句话:工厂模式定义一个用于创建对象的接口,这个接口由子类决定实例化哪一个类。该模式使一个类的实例化延迟到了子类。而子类可以重写接口方法以便创建的时候指定自己的对象类型。
这下是不是清楚多了,还不懂,没关系,多敲几遍,多看几遍,就懂了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。