2017-06-21 10 views
1

私はデザインパターンを研究していましたが、私のお気に入りは工場パターンです。しかし、他の人が書いたコードをもっと掘り下げると、このパターンは頻繁に、特に新しいスタックでは見られません。この記事http://dealwithjs.io/design-patterns-the-factory-pattern-in-javascript/で例えばnode.jsの工場パターン(express)

このようなサンプルを見て:私のためのコードの上

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を使うことができます、なぜ私はここでも工場を使う必要がありますか?私はノードのcommonJsが漏れた問題をちょうど解決したと思う。

+0

実際には必要ありません。 'module.exports = SimpleFactory'のようなものにすることができますし、' var SimpleFactory = require( './ factoryModule'); SimpleFactory.getEngineerEmployee() ' – nicowernli

答えて

0

デザインパターンの工場:Nodejs + ES6See More

、我々はそれを書くために "クラス" を使用。

例:ここには書いていません。それを追加する必要があります。

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); 
     } 
    } 
} 

助けてもらうのに役立ちます。

関連する問題