2017-06-21 98 views
1

我正在学习设计模式,我最喜欢的是工厂模式。但是当我挖掘其他人编写的代码时,我并不认为这种模式经常发生,特别是在较新的堆栈上。node.js中的工厂模式(快速)

例如本文http://dealwithjs.io/design-patterns-the-factory-pattern-in-javascript/样品看起来像这样的:

function SimpleFactory(name) { 
    var factoryName = name; 

    var getSalesEmployee = function(firstName, lastName) { 
     return { 
      firstName: firstName, 
      lastName: lastName, 
      comission: 0, 
      salary: 100, 
      projects: [], 
      type: 'sales' 
     }; 
    } 

    var getEngineerEmployee = function(firstName, lastName) { 
     return { 
      firstName: firstName, 
      lastName: lastName, 
      salary: 150, 
      manager: '', 
      technologies: [], 
      projects: [], 
      type: 'engineer' 
     } 
    } 

    var getName = function() { 
     return factoryName; 
    } 

    return { 
     getSales: getSalesEmployee, 
     getEngineer: getEngineerEmployee, 
     getName: getName 
    } 
} 

module.exports = { 
    getInstance: SimpleFactory 
} 

上面的代码对我来说是控制器,但通常我只是把它写这样

modue.exports = { 

funcA =() => {} 
funcB =() => {} 

} 

,并在另一个文件我可以使用something.funcA,为什么我仍然需要在这里使用工厂?我认为节点的共同点解决了泄漏问题。

+0

这实际上并不需要。你可以像'module.exports = SimpleFactory'这样的东西,然后当你需要时'var SimpleFactory = require('./ factoryModule'); SimpleFactory.getEngineerEmployee()' – nicowernli

回答

0

设计模式工厂:See More

在+的NodeJS ES6,我们使用 “类” 来写。

例如:我不写在这里需要。你需要添加它。

class ImageReader { 
    constructor() {} 
    getDecodeImage($param){}; 
} 

class DecodedImage { 
    constructor(image) { 
     this.image = image; 
    } 

    toString() { 
     return `${this.image}: is decoded`; 
    } 
} 

class GifReader extends ImageReader { 
    constructor(image) { 
     super(); 
     this.decodedImage = new DecodedImage(image); 
    } 

    getDecodeImage() { 
     return this.decodedImage; 
    } 
} 

class JpegReader extends ImageReader { 
    constructor() { 
     super(image); 
     this.decodedImage = new DecodedImage(image); 
    } 

    getDecodeImage() { 
     return this.decodedImage; 
    } 
} 

class FactoryMethodDemo { 
    main(args = []) { 
     let reader = ''; 
     let image = args[0]; 
     let format = image.substring(image.indexOf('.') + 1, (image.length)); 
     if (format.equals("gif")) { 
      reader = new GifReader(image); 
     } 
     if (format.equals("jpeg")) { 
      reader = new JpegReader(image); 
     } 
     if (reader) { 
      decodedImage = reader.getDecodeImage(); 
      console.log(decodedImage); 
     } 
    } 
} 

帮助它会帮助你。