简单工厂模式,又称为静态工厂方法。通过工厂对象创建某个产品对象的实例,主要用于创建同类型对象。简单的说,就是通过一个方法来决定创建类的哪个实例。让我们以水果为例。代码怎么写?首先,我们需要创建一系列水果抽象产品类实例化工厂函数//创建苹果类classApple{constructor(){this.name='apple'}getColor(){return'Red'}}//创建香蕉ClassclassBanana{constructor(name){this.name='banana'this.count=10}getCount(){returnthis.count--}}创建了很多水果类,每个水果类可以实现自己的系列逻辑,但是你不需要关心你要使用哪个类名来创建你想要的水果,所以我们需要一个工厂来生产这些水果实体,那么如何生产呢?定义一个Fruits工厂类classFruits{constructor(type){switch(type){case'apple':returnnewApple()case'banana':returnnewBanana()}}}我们在使用的时候只需要newFruits,通过在你要实例化的内容中,就可以得到对应的水果实体banana')//banana.name=>banana//banana.getCount=>10提供给别人的时候不用这么累。他们只需要知道水果和类型就可以得到他们想要的结果。看到这里可能有同学会说,上面创建各种水果的时候,很多地方都是一样的,也可以提取出相同的部分。简单工厂模式的主要思想是创建对象。创造水果的方法可能有很多种。相同的部分,当然还有一些不同的部分,我们也可以创建一个public创建水果类的方法有如下代码创建一个新的对象formclasscreatFruit{constructor(name,color,count){this.name=namethis.color=colorthis.count=count}getColorName(){return这。color+this.name}}//你也可以constcreatFruit=({name,color,count})=>({name,color,count,getColorName(){returnthis.color+this.name}})你你会发现你也可以使用工厂模式来创建水果类。最后,你可以这样写constapple=newcreatFruit('apple','red',10)constbanana=newcreatFruit('banana','yellow',20)//apple.getColorName()=>redapple//banana.getColorName()=>yellowbanana//orconstapple=creatFruit({name:'apple',color:'red',count:10})//apple.getColorName()=>redapple这样,我们也可以将数组转换为key-value对象constcreateObjectFromArray=([key,value])=>({[key]:value});//createObjectFromArray(['name','FE情报局'])=>{name:'FEIntelligenceBureau'}总结上面其实给了大家两种工厂函数的使用方式,第一种是通过类实例化来创建,第二种是通过扩展对象的形式,使用函数返回一个新的对象。第一种的好处是如果这些类来自同一个父类,父类原型上的方法可以共享。但是,因为第二种是通过函数返回一个新的对象,所以它的方法是不共享的。
