工厂方法模式
-
概念
工厂方法模式就是通过对产品类的抽象使其创建业务主要负责用于创建多类产品的实例。
比如我们在一些网页中,广告投放等就会用到。当我们遇到既要添加类,又要改变工厂函数的情况,我们就可以用工厂方法模式。 -
安全模式类
安全模式类是说可以屏蔽使用对类的错误使用造成的错误。比如对于一个类的创建,我们知道类的前面需要new关键词,但是如果别人不知道这个类,那么就可能忽略new,直接执行类,这样就会造成一些错误。安全模式类我在前面已经讲过,这里就不再说明,下面我们来看一个安全的工厂方法: -
安全的工厂方法例子
//安全模式创建的工厂类 var factory = function(type,content){ if(this instanceof factory){ var s = new this[type](content); return s; }else{ return new factory(type, content); } } //工厂原型中设置创建所有类型数据对象的基类 factory.prototype = { //java书的广告 java: function(content){ //.... }, javascript: function(content){ // }, php: function(content){ // }, UI: function(content){ this.content = content; //闭包实现按顺序遍历 (function(content){ var div = document.createElement('div'); div.innerHTML = content; div.style.color = 'red'; /*console.log(div);*/ /*document.body.insertBefore(div);*/ })(content); } }; //测试 var data = [ { type: 'java', content: 'java是很强大的' }, { type: 'javascript', content: 'javascript更加强大' }, { type: 'UI', content: 'ui能实现不同的效果' } ]; var a = factory(data[2].type, data[2].content); console.log(a.content);
像这样你就可以添加各种的广告类了,而不需要在测试的时候再次创建。
工厂方法模式的本意是将实际创建对象工作推迟到子类当中。我们可以把工厂方法看作是一个实例化对象的工厂类,为了安全起见,我们采用安全模式类,将创建对象的基类放在工厂方法类的原型中即可。