interface Door {
getPassword(): string;
open(password: string): void;
close(): void;
}
class LabDoor implements Door {
getPassword(): string {
return "123456";
}
open(password: string) {
console.log(password === this.getPassword() ? "Opening lab door" : "The password is wrong.");
}
close() {
console.log("Closing the lab door");
}
}
class SecuredDoor implements Door {
private password: string;
constructor(private door: Door) {
this.password = door.getPassword();
}
getPassword(): string {
return "No right";
}
open(password: string) {
if (password === this.password) {
this.door.open(password);
} else {
console.log("The password is wrong.");
}
}
close() {
this.door.close();
}
}