简单工厂模式
介绍
把特征相同的类封装在一个函数中,这样只需要通过这个函数就可以创建需要的对象。例子如下
// 篮球基类
var BasketBall = function (){
this.intro='篮球'
}
BasketBall.prototype = {
getMember:function (){
console.log('每个队伍需要5名队员')
},
getBallSize:function () {
console.log('篮球有特定大小')
}
}
// 足球基类
var FootBall = function (){
this.intro='篮球'
}
FootBall.prototype = {
getMember:function (){
console.log('每个队伍需要5名队员')
},
getBallSize:function () {
console.log('篮球有特定大小')
}
}
var SportsFactory = function (name) {
switch (name){
case 'NAB':
return new BasketBall();
case 'wordCup':
return new FootBall();
}
}
var football = SportsFactory('wordCup')
console.log(football)
console.log(football.intro)
football.getMember()
当函数中的几个类有相同的内容时,是可以抽象提取出来共用的,可以用简单工厂的方式实现
例如创建一些书,这些书共有的属性可以封装到一个类中,这里为了简便我就用上面的已有的代替,然后不同的属性可以作为参数传递进来处理
function createBook(name,time,type) {
var o = new BasketBall()
o.name = name
o.time = time
o.type = type
o.show = function (){
console.log(this.name)
}
return o
}
var book1 = createBook('js',2134,'js')
book1.show() // js
console.log(book1.intro) //篮球
book1.getMember()//每个队伍需要5名队员
第一种是通过类的实例化对象创建的, 第二种是通过创建一个新对象然后包装增强其属性和功能来实现的。
差异性
- 前面的通过类创建对象,如果这些类继承同一父类,那么其父类上的原型方法可以公用
- 而后面的寄生方式创建的对象都是一个个体,他们的方法无法共用
记录
团队项目时尽量少创建全局变量
对于同一类对象在不同需求中的重复性使用,很多时候不需要重复创建,代码复用是面向对象编程的一条准则
通过简单工程来创建一些对象,可以让这些对象共用一些代码资源而又私有一些资源
使用场合限制在创建单一对象