// 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();