根据输入的不同返回不同类的实例,一般用来创建同一类对象。工厂方式的主要思想是将对象的创建与对象的实现分离。
运动工厂
场景:我想获得运动类目的信息、但是我不需要去管这些信息是怎么制定的由谁制定的、我只需要通过
// 篮球类
class Basketball{
constructor(name){
this.name = name
}
getMember(){
console.log('每一只队伍需要五个人,球名称:' + this.name)
}
}
// 足球类
class Football{
constructor(name){
this.name = name
}
getMember(){
console.log('每一只队伍需要11个人,球名称:' + this.name)
}
}
// 网球
class Tennis{
constructor(name){
this.name = name
}
getMember(){
console.log('每一只队伍需要1个人,球名称:' + this.name)
}
}
// 运动工厂
class SportsFactory{
static create(type, name){
switch(type){
case 'NBA':
return new Basketball(name)
case 'WordCup':
return new Football(name)
case 'FrenchOpen':
return new Tennis(name)
}
}
}
const basketball = SportsFactory.create('NBA','花球')
basketball.getMember()
const sportsFactory = SportsFactory.create('WordCup','蓝色足球')
sportsFactory.getMember()
/*
这里解释下为什么使用一个暴露类通过静态方法的方式去按type去创建对应的类、
主要还是因为当一个不知道你这个方法的人人家不知道是通过new 还是直接执行的方式创建类、索性直接
通过类的静态方法统一
*/