JavaScript Factory Pattern
From http://addyosmani.com/resources/essentialjsdesignpatterns/book/#factorypatternjavascript
by david_i_smith
JavaScript
function SummaryReport (options) {
this.orgId = options.orgId || 1;
this.orgType = options.orgType || 1;
this.academicYear = options.academicYear || 2015;
}
function RosterReport (options) {
this.orgId = options.orgId || 1;
this.orgType = options.orgType || 1;
this.academicYear = options.academicYear || 2015;
this.sex = options.sex || 'Male';
this.race = options.race || 'White';
}
function ReportFactory () {}
ReportFactory.prototype.reportType = SummaryReport;
ReportFactory.prototype.createReport = function (options) {
switch (options.reportType) {
case "summary":
this.reportType = SummaryReport;
break;
case "roster":
this.reportType = RosterReport;
break;
}
return new this.reportType(options);
};
var reportFactory = new ReportFactory();
var summaryReport = reportFactory.createReport({
reportType: 'summary',
orgId: 123456,
orgType: 654321
});
console.log(summaryReport instanceof SummaryReport);
console.log(summaryReport);
var rosterReport = new reportFactory.createReport({
reportType: 'roster',
orgId: 123456,
orgType: 654321,
sex: 'Female'
});
console.log(rosterReport instanceof RosterReport);
console.log(rosterReport);