Skip to content

Instantly share code, notes, and snippets.

@Kamilnaja
Created April 6, 2019 09:47
Show Gist options
  • Save Kamilnaja/77b40664fce00a6ce4d5ec5e01c87ce8 to your computer and use it in GitHub Desktop.
Save Kamilnaja/77b40664fce00a6ce4d5ec5e01c87ce8 to your computer and use it in GitHub Desktop.
strategy implementation in ts
class Knight {
constructor(private name: string, private age: number) { }
public getAge(): number {
return this.age;
}
public getName(): string {
return this.name;
}
}
interface KnightValidator {
validate(knight: Knight): boolean;
}
class OldKnightsValidator implements KnightValidator {
validate(knight: Knight) {
return knight.getAge() > 60
}
}
class MaleKnightsValidator implements KnightValidator {
validate(knight: Knight) {
const name = knight.getName();
return name[name.length - 1] !== 'a'
}
}
class Arena {
constructor(
private validator: KnightValidator,
private knights: Knight[] = []) { }
public addKnight(knight: Knight): void {
if (this.validator.validate(knight)) {
this.knights.push(knight);
}
}
public toString(): string {
let out: string = '';
this.knights.forEach((knight: Knight) => {
out += " Rycerz " + knight.getName() + "\n";
})
return out;
}
}
const anna = new Knight('Anna', 20);
const zbyszqo = new Knight('Zbyszko', 40);
const dobromil = new Knight('Dobromił', 70);
const oldValid = new OldKnightsValidator();
const nameValid = new MaleKnightsValidator();
const eldersArena = new Arena(oldValid); // tworzymy arenę z odpowiednim walidatorem
const malesArena = new Arena(nameValid);
eldersArena.addKnight(anna);
eldersArena.addKnight(zbyszqo);
eldersArena.addKnight(dobromil);
malesArena.addKnight(anna);
malesArena.addKnight(zbyszqo);
malesArena.addKnight(dobromil);
console.log("=== Arena Seniorów ===");
console.log(eldersArena);
console.log("== Arena bez równouprawnienia ==");
console.log(malesArena);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment