You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// ES6 factory/** * @abstract class Animal */classAnimal{constructor(){if(new.target===Animal){thrownewError('Animal class is a abstract class');};}call(){thrownewError('function call is not implemented');}eat(){thrownewError('function eat is not implemented');}}
/** * @class Cat * @extends Animal */classCatextendsAnimal{constructor(){super();console.log('I am a cat');}call(){console.log('miao miao~');}eat(){console.log('eat fish');}}
/** * @class Dog * @extends Animal */classDogextendsAnimal{constructor(){super();console.log('I am a dog');}call(){console.log('wang wang~');}eat(){console.log('eat meat');}}
/** * @class AnimalFactory * factory class * AnimalType */classAnimalFactory{constructor(){}staticCreatAnimal(strAnimalType=AnimalType.Cat){switch(strAnimalType){caseAnimalType.Cat:
returnnewCat();break;caseAnimalType.Dog:
returnnewDog();break;}}}/** * AnimalType * @type String */constAnimalType={Cat: 'Cat',Dog: 'Dog'};(function(){/*create a cat*/letcat=AnimalFactory.CreatAnimal(AnimalType.Cat);cat.call();cat.eat();/*create a dog*/letdog=AnimalFactory.CreatAnimal(AnimalType.Dog);dog.call();dog.eat();})();
单例模式
// ES6 single instance/** * @instance class DBoperation */classDBoperation{constructor(){if(DBoperation.instance===undefined){/*init*/this.add=function(){console.log('add');}this.del=function(){console.log('del');}this.mod=function(){console.log('mod');}this.find=function(){console.log('find');}DBoperation.instance=this;};returnDBoperation.instance;}}DBoperation.instance;leta=newDBoperation();letb=newDBoperation();console.log(a===b)a.add()b.add()
观察者模式
// ES6 single observerclassObserver{constructor(){this.objSet=newSet();}attach(obj){this.objSet.add(obj);}detach(obj){this.objSet.delete(obj);}fire(){for(letitemofthis.objSet){item.update&&item.update();}}}classConfig{constructor(name="config"){this.name=name;}update(){console.log('i am '+this.name);}}letc1=newConfig('cfg1');letc2=newConfig('cfg2');letc3=newConfig('cfg3');letobs=newObserver();obs.attach(c1);obs.attach(c2);obs.attach(c3);obs.detach(c2);obs.fire();