node.js中的工厂模式(快递)

时间:2017-06-21 06:55:13

标签: javascript node.js express design-patterns

我正在研究设计模式,我最喜欢的是工厂模式。但是当我挖掘其他人写的更多代码时,我不会经常看到这种模式,特别是在较新的堆栈上。

例如,在本文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,为什么我还需要在这里使用工厂?我认为节点的commonJs只是解决了泄漏问题。

1 个答案:

答案 0 :(得分:0)

设计模式工厂:See More

在Nodejs + ES6中,我们使用“Class”来编写它。

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

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

帮助它会帮助你。