Design Patterns Using Typescript