工厂模式: 又叫静态工厂方法,由一个工厂对象决定创建某一种产品对象类的实例。主要用来创建同一类对象
简单点就是方便创建类,把类打包到一个类里,用的时候直接叫包名就好了。
当代码中的类很多的时候,例如:
class Apple{
constructor() {
console.log("Apple被造出来了")
}
}
class Oppo{
constructor() {
console.log("Oppo被造出来了")
}
}
class Xiaomi{
constructor() {
console.log("Xiaomi被造出来了")
}
}
class Vivo{
constructor() {
console.log("Vivo被造出来了")
}
}
class Huawei{
constructor() {
console.log("Huawei被造出来了")
}
}
class Lg{
constructor() {
console.log("Lg被造出来了")
}
}
这时候想创建类还得看看他叫什么,是个什么东西,如果我们给他打个包:
class PhoneProducer{
getPhone(type){
switch (type.toLowerCase()){
case "apple":
return new Apple()
case "oppo":
return new Oppo()
case "xiaomi":
return new Xiaomi()
...
default:
return ""
}
}
}
// 调用工厂返回苹果手机的实例
const iPhone_12_Pro_Max = new PhoneProducer().getPhone('apple') // output: Apple被造出来了
这样,每次实例化某个手机就不用再照着全部的翻了,只需要从Phone类里找就好了
这种方法的好处:结构清晰、代码简单
缺点:违背开闭原则:代码维护不方便,新增一个类的时候还得去改工厂类的代码,由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。
(好水啊,但确实没啥好写的。。。