简单工厂模式:又称为静态工厂方法模式。

在简单工厂模式中,可以根据参数的不同返回不同类的实例。

简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

例如

 <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方法的  感觉不太好

 

 

如有不足之处 ,请批评指正

posted on 2019-03-14 13:32  永不言退  阅读(171)  评论(0编辑  收藏  举报