javaScript工厂模式

工厂模式定义一个用于创建对象的接口,

var PaperFloderCreatorFactory = function (user, paths, pathModel) {

};

 

将要创建不同的类可以看作模具,用以创建不同的实例类。

PaperFloderCreatorFactory.Creators = {
    'spec_html': paperHtmlCreator,
    'lib': paperLibCreator,
    'practices': paperPracticesCreator,
    'specs': paperPracticesCreator
};

 

工厂要根据客户的需求生产不同的实例类

PaperFloderCreatorFactory.create_file_creator = function (file, user, paths, pathModel) {
    var Model = PaperFloderCreatorFactory._forCreator(file);

    return new Model(user, paths, pathModel, file);
};

 

要生产的类模块,而这些实例经常都拥有相同的接口.

function PaperHtmlCreator(user, paths, pathModel, type){
    this.user       = user;
    this.paths      = paths;
    this.pathModel  = pathModel;
    this.type       = type;
}

PaperHtmlCreator.prototype.create_floder = function(){
    var self = this;
    return new Promise(function(resolve){
        if(! self.paths) resolve();
        FileOperate.copy_file_and_rename(self.paths,self.pathModel.get_paper_course_path(self.user,'practices'));
        resolve();
    })
};
function PaperLibCreator(user, paths, pathModel,type){
    this.user       = user;
    this.paths      = paths;
    this.pathModel  = pathModel;
    this.type       = type;
}

PaperLibCreator.prototype.create_floder = function () {
    var self = this;
    return new Promise(function (resolve) {
        if(! self.paths) resolve();
        FileOperate.copy_dir(self.paths, self.pathModel.get_paper_course_path(self.user, 'lib'), function () {
            resolve()
        })
    })
};

 

使用生产的实例类

floder_creator = PaperFloderCreatorFactory.create_file_creator(key, user, paths, pathModel);

 

工厂模式适用的模式

  1. 对象的构建十分复杂
  2. 需要根据不同的要创建不同的实例或者大量属性相同的属性的小对象

工厂有利于代码结构的清晰,也可以是模块职责的单一化。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值