JavaScript中的简单工厂模式

简单工厂模式,又叫做静态工厂方法模式。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类的实例。
简单工厂类有三个角色:
1, 工厂角色
它是工厂模式的核心,它负责实现创建所有实例的内部逻辑,会根据它所包涵的一个静态方法调用时传递的参数来决定创建的对象。
2, 对象类角色
它是工厂模式在调用静态方法创建对象时的对象类。
3, 具体对象角色
它是工厂模式最终创建的对象,所有创建的对象都是某一个对象类的实例。


概念比较拗口,下面通过一个例子来说明:

<script>
//声明父类
function Human(){
	this.speak=function(str){
		console.log(str);
	}
	this.walk=function(){
		console.log("迈懂双脚开始走动");
	}
//父类获取子类对象的静态方法
	Human.gethumaninstance=function(job){
		if(job=="student"){
				return new Student();
			}else if(job=="civil"){
				return new Civil();
			}else if(job=="Seoer"){
				return new Seoer();
			}else{
				throw "参数为空或非法";
		}
	}
}

//学生子类
function Student(){
	this.Work=function(){
		console.log("我的主要工作是是上课");
	}
}
//公务员子类
function Civil(){
	this.Work=function(){
		console.log("我的主要工作是喝茶和看报纸");
	}
}
//SEOer子类
function Seoer(){
	this.Work=function(){
		console.log("我的主要工作是创造有价值的东西");
	}
}
Student.prototype=new Human();
Civil.prototype=new Human();
Seoer.prototype=new Human();

var xiaoming=Human.gethumaninstance('student');
var lilei=Human.gethumaninstance('civil');
var shidan=Human.gethumaninstance('Seoer');

xiaoming.speak("大家好,我是小明");
lilei.speak("大家好,我是李雷");
shidan.speak("大家好,我是史丹");
xiaoming.walk();
xiaoming.Work();
lilei.Work();
shidan.Work();
</script>

这个例子里,一个有四个类: Human, Student, Civil和Seoer,后面的三个类就继承于Human类,Human类包含了一个静态方法gethumaninstance,这个静态方法接受一个参数,它会根据这个参数的类型创建一个相应的对象。

在这个例子中:Human是工厂角色,Student, Civil和Seoer属于对象类角色,xiaoming,lilei,shidan属于具体的对象角色,这三个对象不是直接通过new关键字来获取,而是通过Human的静态方法生产,等于是多了一个环节,我们就能在这个环节里做需要的操作。

在上面这个例子中,子类型Student,Civil和Seoer还继承于Human,这样可以方便一些公用属性和方法的继承。

发表回复

评论列表:

Hito
Hito
可以这样理解,但是这个过程可以做很多事
胡兮阳
胡兮阳
也就是根据参数产生不同的对象,new换个方法而已
回复此留言
胡兮阳
胡兮阳
也就是根据参数产生不同的对象,new换个方法而已
回复此留言