This is a list of design patterns, implemented in Dojo JS
I'v found difficult to work with some restrictions as the use of static variables, in this kind of implementation
Observer
//Observer pattern dojo.declare("com.dev.dojo.Observer",[], { state: "observer", obs: null, constructor:function(obl){ this.obs = obl; }, update: function(sta){ this.state = sta; status = this.obs.updateObserver(this); console.log("udate observer result for "+ this + ": " + status); } }); dojo.declare("com.dev.dojo.Observable",[], { state: "observable", observers: [], Observervable:function(obss){ this.observers = obss; }, addObserver: function(o){ idx = dojo.indexOf(this.observers,o); if(idx!=null && idx>=0) this.observers[idx] = o; else this.observers.push(o); }, getObservers: function(){ return this.observers; }, notifyAll: function(stat){ this.state = stat; for(i=0;i< this.observers.length;i++) this.observers[i].update(this.state); }, updateObserver:function(observer){ idx = dojo.indexOf(this.observers,observer); if(idx!=null && idx>=0){ this.observers[idx] = observer; return 1; } return -1; } , displayObservers: function(s) { for(i=0;iSingleton
//Singleton pattern var created = false; dojo.declare("com.dev.dojo.Singleton",[],{ singleton:null, __isCreated__: created, getInstance: function(){ if(!this.__isCreated__){ created = true; this.singleton = new com.dev.dojo.Singleton(); } return this.singleton; }, doTask: function(seconds){ for(i=0;iFactory Method
//Factory method pattern dojo.declare("com.dev.dojo.Animal",[],{ type:"Animal", saySomething: function(){ return "I'm too generic to say something"; } }); dojo.declare("com.dev.dojo.Dog",[com.dev.dojo.Animal],{ type:"Dog", saySomething: function(){ return "Guau,guau,guau"; } }); dojo.declare("com.dev.dojo.Tiger",[com.dev.dojo.Animal],{ type:"Tiger", saySomething: function(){ return "Roarrrr,roarrrrrr"; } }); dojo.declare("com.dev.dojo.Factory",[],{ getInstance:function(type){ var instance = null; if(type==new com.dev.dojo.Animal().type) instance = new com.dev.dojo.Animal(); else if(type==new com.dev.dojo.Tiger().type) instance = new com.dev.dojo.Tiger(); else if(type==new com.dev.dojo.Dog().type) instance = new com.dev.dojo.Dog(); return instance; } }); var t = "Dog"; var o = com.dev.dojo.Factory().getInstance(t); alert(o.saySomething()); t="Tiger"; o = com.dev.dojo.Factory().getInstance(t); alert(o.saySomething()); //End of factory methodAdapter
//Adapter pattern /* Example of adapter pattern*/ function FlyingEngine() { var operation = "Principal "; var state = -1; this.turnOnEngine=function(){ this.operation += "Engine is turning ON\n"; this.state = 0; } this.takingOver=function(){ if(this.state<1) this.operation += "Can't take over until engine is turn on"; this.operation += "Taking over\n"; this.state=2; } this.flying=function(){ if(state<2) operation+="Not posible to fly until taking over"; this.operation += "FLYING\n"; this.state=3; } } function Helicopter(){ var operation = "Principal "; var flyingEngine = new FlyingEngine(); this.rotorsWarm=function(){ if(this.state==0){ /*adapter->*/ flyingEngine.operation = "Rotors "; flyingEngine.turnOnEngine(); this.operation += flyingEngine.operation; this.operation += "warming rotors:" for(i=0;i<5;i++) this.operation +=i } this.operation += "\n"; this.state+=1; } } dojo.extend(Helicopter,new FlyingEngine()); var h1 = new Helicopter(); var s = ""; h1.turnOnEngine(); h1.rotorsWarm(); h1.takingOver(); h1.flying(); s = h1.operation; alert(s);