interfaceIObserverf{nameChanged(oldName,newName);}classPerson{private _name:string='嘻嘻';
observers:Array<IObserverf>=newArray<IObserverf>();setname(value:string){let oldName:string=this._name;this._name = value;//发生变化,便利观察者数组,给所有的观察者发消息for(let observer ofthis.observers){
observer.nameChanged(oldName,this._name);}}getname(){returnthis._name;}}classTestimplementsIObserverf{nameChanged(oldName:string,newName:string){
document.write("监听到变化,名字"+ oldName +"变为"+ newName);}}let person =newPerson();let test =newTest();
person.observers.push(test);
person.name ="哈哈";
四、工厂模式
enum CarType{
Bmw,
Audi,
Benz
}classCar{
name:string;staticCreate(carType: CarType): Car {let car: Car;switch(carType){case CarType.Audi:
car =newAudi();break;case CarType.Benz:
car =newBenz();break;case CarType.Bmw:
car =newBmw();break;}return car;}}classBmwextendsCar{}classBenzextendsCar{}classAudiextendsCar{}let bmw = Car.Create(CarType.Bmw);let bgenz = Car.Create(CarType.Benz);let audi = Car.Create(CarType.Audi);console.log(bmw,bgenz,audi)