Skip to content

Instantly share code, notes, and snippets.

@myildizCH
Created July 19, 2023 19:01
Show Gist options
  • Save myildizCH/f814638e73539e0027eaf5e12bc97eb7 to your computer and use it in GitHub Desktop.
Save myildizCH/f814638e73539e0027eaf5e12bc97eb7 to your computer and use it in GitHub Desktop.
Builder Pattern
// Step 1: Create the Product Class
class GameCharacter {
name?: string;
class?: string;
weapon?: string;
armor?: string;
// ... any other game character attributes
describe() {
console.log(`Character: ${this.name}, Class: ${this.class}, Weapon: ${this.weapon}, Armor: ${this.armor}`);
}
}
// Step 2: Create the Builder Interface and Class
interface CharacterBuilder {
setName(name: string): void;
setClass(className: string): void;
setWeapon(weapon: string): void;
setArmor(armor: string): void;
// ... other setter methods
build(): GameCharacter;
}
class GameCharacterBuilder implements CharacterBuilder {
private character: GameCharacter;
constructor() {
this.character = new GameCharacter();
}
setName(name: string): void {
this.character.name = name;
}
setClass(className: string): void {
this.character.class = className;
}
setWeapon(weapon: string): void {
this.character.weapon = weapon;
}
setArmor(armor: string): void {
this.character.armor = armor;
}
// ... other setter methods
build(): GameCharacter {
return this.character;
}
}
// Step 3: Use the Builder
let characterBuilder = new GameCharacterBuilder();
characterBuilder.setName("Archer");
characterBuilder.setClass("Elf");
characterBuilder.setWeapon("Bow");
characterBuilder.setArmor("Leather armor");
let character = characterBuilder.build();
character.describe(); // Outputs: Character: Archer, Class: Elf, Weapon: Bow, Armor: Leather armor
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment