Creational Design patterns
this patterns help in creating objects from functions.
by bhupendra negi
HTML
<ul>
Creational Design Pattern
<li> Constructor </li>
<li> Module </li>
<li> Factory </li>
<li> Singleton </li>
</ul>
JavaScript
/* Constructpr pattern */
function Task(name) {
this.name = name;
this.completed = false;
}
Task.prototype = {
complete: function() {
this.completed = true;
},
toString: function() {
console.log("The task is " + this.name + " and its status is :" + this.completed)
}
}
var task1 = new Task("demo for constructor pattern");
console.log(task1);
task1.toString();
task1.complete();
task1.toString();
/* Module pattern */
var Repo = function() {
var db = {} // Database configurations available to get and set methods via closures
return {
get: function(id) {
console.log("Getting data" + id);
return ("task " + id + " fetched")
},
save: function(id) {
console.log("Saving data " + id)
}
}
}
var op1 = new Task(Repo().get(1));
console.log(op1);
/* Factory pattern */
var repoFactory = function() {
var repos = this;
var repoList = [{
name: 'task',
source: './taskrepo'
}, {
name: 'project',
source: './projectrepo'
}]
repoList.forEach(function(repo) {
repos[repo.name] = require(repo.source);
});
}
// module.exports = new repofactory ;
// var repo = repoFactory.task.get(1)
/* Singleton */
var TaskRepo = ( function(){
var taskRepo;
function createRepo() {
taskrepo = new Object("new task");
return taskRepo;
}
return {
getInstance: function() {
if (!taskRepo) {
taskRepo = createRepo();
}
return taskRepo;
}
}
})();
var taskrepo1 = TaskRepo.getInstance();
var taskrepo2 = TaskRepo.getInstance();
console.log(taskrepo1 === taskrepo2)