从简单对象实例代码理解软件设计模式工厂模式的本质。工厂模式是软件工程领域非常常见的设计模式,它抽象了对象实例的过程,不关注具体对象的创建过程。虽然javascript中没有类,但是可以定义特殊的函数来封装创建特定对象的细节。该厂的特点是它是大规模生产同类产品的典范。在编程场景中,也继承了工厂的特性,通过一个代码块的重复调用,实现了大量相似的功能和属性。
图A如图A所示,在javascript编程中,使用工厂模式定义了一个对象girl,给对象添加了三个属性和一个方法。三个参数name、age和job被传递给creategirl函数,调用该函数来实例化对象。在这个例子中,实例化了三个对象:mygirl、Amygirl和Bmygirl。其实creategirl函数可以重复调用无数次,每次调用都会返回一个对象实例,每个实例有三个属性和一个方法。一个工厂可以定义一个对象模型,然后可以快速大规模实例化对象。
图B如图B和图C所示,采用了对象的literal模式,也构造了三个对象:Cmygirl、Dmygirl和Emygirl,它们都有相似的属性和方法。每个对象相互独立,不共享任何相同的代码。每个代码段都是一个完整的对象实例,具有所有独立的属性和方法。要添加或删除任何属性,都必须找到对象的代码并逐个操作。所以如果在批量构建功能的场景下使用这种方式,不仅程序代码臃肿,后期维护也很困难。工厂模式构造的对象正好解决了问题,给程序员带来了新的设计思路。
图c当需要大量创建具有相似属性和方法的对象时,工厂模式在创建对象的过程中比对象的字面量更方便快捷,可以用更少的代码实现同样的功能。而且factory pattern创建的对象不仅代码整洁,而且结构清晰,便于后期添加或删除属性。所以后期程序的维护成本更低,更有利于程序的迭代更新。
图D如图D,是上面所有代码的执行结果。简单的六行字,属性和方法相同的对象实例,是两种完全不同的对象构造模式的执行结果。前三行是由工厂模式创建的三个对象实例;最后三行是由object literal模式构造的三个对象实例。两种对象构建模式的粗略比较:同样是构建三个属性和方法相同的对象,工厂模式需要15行代码;object的文字模式需要27行代码。因此,工厂模式更适合实现大量具有相似属性和功能的对象,而文字量适合实现单个对象。工厂模型的质量通常由应用程序场景决定。