From 09c90781ee13c899008e8178f2f529dd403de42d Mon Sep 17 00:00:00 2001 From: Kerollos Magdy Date: Sun, 5 May 2019 18:30:59 +0200 Subject: [PATCH] add notification example --- observer/notification.ts | 60 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 observer/notification.ts diff --git a/observer/notification.ts b/observer/notification.ts new file mode 100644 index 0000000..550768e --- /dev/null +++ b/observer/notification.ts @@ -0,0 +1,60 @@ +interface Subject { + registerObserver(o: Observer); + removeObserver(o: Observer); + notifyObservers(post: Post); +} + +interface Observer { + getNotification(post: Post); +} + +class Group implements Subject { + users: Observer[] = []; + posts: Post[] = []; + newPost(post: Post) { + this.posts.push(post); // Add a new post to the group + this.notifyObservers(post); // Notify each user in the group about the post + } + registerObserver(o: Observer) { + this.users.push(o); + } + removeObserver(o: Observer) { + let index = this.users.indexOf(o); + this.users.splice(index, 1); + } + notifyObservers(post: Post) { + for (let user of this.users) + if (user != post.user) // don't notify the user who posted the post himself + user.getNotification(post); + } + +} + +class Post { + constructor(public user: User, public content: String) { + + } +} + +class User implements Observer { + constructor(public name: String) { + + } + getNotification(post: Post) { + console.log(`Notification for: ${this.name}\nUser: ${post.user.name} posted\nContent: ${post.content}\n`); + } +} + +const myAwesomeFacebookGroup = new Group(); + +const user1 = new User("Kerollos Magdy"); +const user2 = new User("Jane Smith"); + +myAwesomeFacebookGroup.registerObserver(user1); +myAwesomeFacebookGroup.registerObserver(user2); + +const post1 = new Post(user1, "Hello Everybody!"); +const post2 = new Post(user2, "Welcome to our awesome group Kerollos."); + +myAwesomeFacebookGroup.newPost(post1); +myAwesomeFacebookGroup.newPost(post2); \ No newline at end of file