2017-06-21 99 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); 
     } 
    } 
} 

幫助它會幫助你。