Skip to content

Commit 8e30e74

Browse files
author
Joao Paulo Monteiro
committed
Add Observer Pattern and his script
1 parent 9e4705c commit 8e30e74

File tree

7 files changed

+79
-1
lines changed

7 files changed

+79
-1
lines changed

observer/Follower.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class Follower{
2+
update(data){
3+
console.log(`Awwnnn... You're ${data} <3`);
4+
}
5+
}
6+
export default Follower;

observer/Hater.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class Hater{
2+
update(data){
3+
console.log(`Argh! Bad thing. You're ${data}? Shame!`);
4+
}
5+
}
6+
export default Hater;

observer/Observable.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Observable{
2+
3+
constructor(){
4+
this._listeners = [];
5+
}
6+
7+
subscribe(subscriber){
8+
this._listeners.push(subscriber);
9+
}
10+
11+
unsubscribe(unsubscriber){
12+
this._listeners = this._listeners.filter((listener) => listener !== unsubscriber);
13+
}
14+
15+
notify(data){
16+
this._listeners.forEach(listener => listener.update(data));
17+
}
18+
}
19+
20+
export default Observable;

observer/Stalker.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class Stalker{
2+
update(data){
3+
console.log(`Hmm... I'm looking you ${data}...`);
4+
}
5+
}
6+
export default Stalker;

observer/User.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import Observable from './Observable';
2+
class User extends Observable{
3+
4+
constructor(){
5+
super();
6+
}
7+
8+
doSomething(data){
9+
console.log(`I'm ${data}`);
10+
this.notify(data);
11+
}
12+
}
13+
export default User;

observer/main.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import User from './User';
2+
import Follower from './Follower';
3+
import Stalker from './Stalker';
4+
import Hater from './Hater';
5+
6+
console.log('Creating a user and some other profiles');
7+
const user = new User();
8+
const fan = new Follower();
9+
const stalker = new Stalker();
10+
const hater = new Hater();
11+
12+
console.log('Some people starts to following our star!');
13+
user.subscribe(fan);
14+
user.subscribe(stalker);
15+
user.subscribe(hater);
16+
17+
console.log('Our star starts to act! Let\'s see what happens...');
18+
19+
user.doSomething('walking on the street');
20+
user.doSomething('running on the street');
21+
user.doSomething('smiling to everyone!');
22+
23+
console.log('Our start finally managed to mislead the hater');
24+
user.unsubscribe(hater);
25+
26+
user.doSomething('Acting normally with no worries');

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
"sucrase": "^3.10.1"
55
},
66
"scripts": {
7-
"strategy": "nodemon strategy/main.js"
7+
"strategy": "nodemon strategy/main.js",
8+
"observer": "nodemon observer/main.js"
89
},
910
"name": "design_patterns",
1011
"version": "1.0.0",

0 commit comments

Comments
 (0)