简单工厂模式:又称为静态工厂方法模式。
在简单工厂模式中,可以根据参数的不同返回不同类的实例。
简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
例如
<script> class work{ go(name){ return "今天坐"+name+"去上班" } } let work1 = new work let work2 = new work console.log(work1.go("汽车"))
console.log(work2.go("飞机"))
console.log(work1.eat("汽车"))
console.log(work2.eat("飞机"))
</script>
对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量。只需要记住方法名字去调用就可以,并不需要知道方法的具体实现
但是如果实现类比较多的时候,简单工厂方法就需要频繁的去修改父类,这显然是不符合开闭原则的。
工厂方法模式
定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。
//工厂抽象类 class work { workto() { return "工厂抽象类" } } //产品抽象类 class traffic { go() { return "产品抽象类" } } //产品子类,实现类 class traffic1 extends traffic { go() { console.log("产品1被创建") } } class traffic2 extends traffic { go() { console.log("产品2被创建") } } //工厂子类,实现类 class work1 extends work { workto(){ return new traffic1 } } class work2 extends work { workto(){ return new traffic2 } } //通过工厂实现类创建不同的产品实例 workA = new work1 workA.workto().go() workB = new work2 workB.workto().go()
工厂模式可以说是简单工厂模式的进一步抽象和拓展,在保留了简单工厂的封装优点的同时,让扩展变得简单,让继承变得可行,增加了多态性的体现。
后来又改了一下下边 使得每个具体工厂类只负责创建对应的产品,更符合单一原则,简单工厂有用switch方法的 感觉不太好
如有不足之处 ,请批评指正