<h1>给我一张名片——工厂方法模式</h1>
<p>工厂方法模式(Factory Method):通过对产品类的抽象使其创建业务主要负责用于创建多类产品的实例。</p>
<p>工厂方法模式本意是说将实际创建对象工作推迟到子类中。这样核心类就成了抽象类,JavaScript没有像传统类那样的方式轻易创建抽象类,
所以在JavaScript中实现工厂方法模式我们只需要参考它的核心思想即可。所以我们可以将工厂方法看作是一个实例化对象的工厂类。安全起见,我们采用安全模式类,
而我们将创建对象的基类放在工厂方法类的原型中即可。</p>
<script>
//安全的工厂方法模式
var Factory = function( type, content ){
if( this instanceof Factory ){
var s = new this[ type ]( content );
return s;
}else{
new Factory( type, content );
}
};
Factory.prototype = {
Java: function( content ){
//....
},
JavaScript: function( content ){
//....
},
UI: function( content ){
this.content = content;
(function( content){
var oDiv = document.createElement( "div" );
oDiv.innerHTML = content;
oDiv.style.border = "1px solid #333";
document.getElementById( "container" ).appendChild( oDiv );
} )( content );
},
php: function( content ){
//....
}
}
</script>
<p>这样我们以后如果想添加其他的类,是不是只需要写在Factory这个工厂类的原型里就可以了。</p>
<p>这样以后就不必担心创建时做任何修改,就好比你在Factory类的原型里面注册一张名片,
以后需要哪类只需要拿这张名片,查找里面的信息就能找到这个类了,所以就不用担心使用时找不到基类的问题了。</p>
<p>忆之获:对于创建多类对象,前面学过的简单工厂模式就不太适用了,这是简单工厂模式的局限,当然这正是工厂方法模式的价值之所在,通过工厂方法模式我们可以
轻松创建类型的实例对象,这样工厂方法对象在创建对象的方式也避免了使用者与对象类之间的耦合,用户不必关心创建该对象的具体类,只需调用工厂方法即可。</p>