JavaScript 工厂模式核心原理与多场景应用解析

作者:青柠时间:2026-10-24 21:04:36浏览:531

本文深入解析 JavaScript 中的工厂模式,阐述其作为常用设计模式在动态创建对象中的作用。文章详细说明了该模式适用于运行期间需从可互换子类中选择的场景,并强调接口实现的重要性。通过独立函数、类方法及隐式逻辑三种形式,结合 AJAX 处理、事件绑定及参数配置等代码示例,展示工厂模式在函数、类和参数选择中的本质应用。

工厂模式概述

本文探讨的设计模式类型为工厂模式。



作为一种广泛使用的设计模式,工厂模式的主要功能是在程序运行期间动态地创建对象。



该模式适用于那些在运行时需要在多个可互换的子类之间进行选择的类结构。



在使用工厂模式时,需要注意确保接口的正确实现,以便不同子类能够被同等对待。同时,应当恰当运用工厂模式,避免拘泥于固定形式,重点在于理解其核心本质。



工厂模式的关键点在于利用函数、类或子类作为选择器来构建对象。



其本质是将函数作为一种选择器来使用。



基本使用形式

工厂模式的一般使用形式如下所示。



第一种形式是作为独立的选择器存在。



具体实现代码如下:

 
function FactoryMode(index){
switch(index){
case "index1" :
return new Class1();break;
case "index2":
return new Class2();break;
case "index3":
return new Class3();break;
default:return new ClassComm();break;
} 
} 

第二种形式是作为类的一个方法存在。



具体实现代码如下:

 
var MainClass=function(){};//主类构造器
MainClass.prototype={
FactoryMode:function(){}//子类选择器
} 

第三种形式是隐式选择,即不依赖使用者的主观选择,而是根据条件自动决定。



具体实现代码如下:

 
var xmlRequest=function(){
if(this.isOffOnline()){
xhr= new OfflineHandler();
//如果此时网络不可用,创建可缓存AJAX对象
else if(this.isHightLatency()){
xhr= new QueuedHandler();
//如果网络延迟较大,创建队列形式AJAX对象
else {
xhr=new SimpleHandler();
//如果网络正常,创建简单AJAX对象
interface.ensureImplements(xhr,AjaxHandler);
//检查对象是否实现了接口,从而确保以后的工作可以顺利进行
return xhr;
} 

工厂模式的延伸应用

此外,工厂模式还有进一步的延伸应用。



工厂模式的本质就是选择器的应用,这种选择器不仅可以用于对象的选择,还可以扩展为函数的选择、类的选择以及参数的选择。



例如在函数的选择中:


具体实现代码如下:

 
var addEvent=(function(){
if(!-[0,]){
return function(elem,type,handler){
elem[type+handler.toString()]=handler;
elem.attachEvent("on"+type,elem[type+handler.toString]);
}}//if IE
else {
return function(elem,type,handler){
elem.addEventListener(type,handler,false);
} 
} 
})();//避免多次判断

在类的选择中:



具体实现代码如下:

 
var suitableClass=function(){
if(match condition A) return Class1;
else if(match condition B) return Class2;
else return ClassComm;
} 

在参数的选择中:



具体实现代码如下:

 
function Country(country){
if(country=="China")
this.config={};//设置基本参数1
else if(contry=="America")
this.config={};//设置参数2
else if()
.......//等等
} 
Country.prototype={};
作者最新文章