File tree 9 files changed +189
-0
lines changed
9 files changed +189
-0
lines changed Original file line number Diff line number Diff line change
1
+ 'use strict' ;
2
+
3
+ // Callback passing
4
+
5
+ class Server {
6
+ shutdown ( callback ) {
7
+ console . log ( 'Shutting down...' ) ;
8
+ callback ( ) ;
9
+ }
10
+ }
11
+
12
+ // Usage
13
+
14
+ const server = new Server ( ) ;
15
+ server . shutdown ( ( ) => {
16
+ console . log ( 'Bye!' ) ;
17
+ process . exit ( 0 ) ;
18
+ } ) ;
Original file line number Diff line number Diff line change
1
+ 'use strict' ;
2
+
3
+ // Revealing constructor
4
+
5
+ class Server {
6
+ constructor ( log ) {
7
+ this . log = log ;
8
+ }
9
+
10
+ shutdown ( ) {
11
+ this . log ( 'Shutting down...' ) ;
12
+ }
13
+ }
14
+
15
+ // Usage
16
+
17
+ const server = new Server ( console . log ) ;
18
+ server . shutdown ( ) ;
19
+ console . log ( 'Bye!' ) ;
Original file line number Diff line number Diff line change
1
+ 'use strict' ;
2
+
3
+ // Dependency injection
4
+
5
+ class Server {
6
+ constructor ( logger ) {
7
+ this . logger = logger ;
8
+ }
9
+
10
+ shutdown ( ) {
11
+ this . logger . log ( 'Shutting down...' ) ;
12
+ }
13
+ }
14
+
15
+ // Usage
16
+
17
+ const server = new Server ( console ) ;
18
+ server . shutdown ( ) ;
19
+ console . log ( 'Bye!' ) ;
Original file line number Diff line number Diff line change
1
+ 'use strict' ;
2
+
3
+ // Service locator: require or import
4
+
5
+ const { Logger } = require ( './logger.js' ) ;
6
+
7
+ class Server {
8
+ constructor ( ) {
9
+ this . logger = new Logger ( ) ;
10
+ }
11
+
12
+ shutdown ( ) {
13
+ this . logger . log ( 'Shutting down...' ) ;
14
+ }
15
+ }
16
+
17
+ // Usage
18
+
19
+ const server = new Server ( ) ;
20
+ server . shutdown ( ) ;
21
+ console . log ( 'Bye!' ) ;
Original file line number Diff line number Diff line change
1
+ 'use strict' ;
2
+
3
+ // Service locator
4
+
5
+ const { ServiceLocator } = require ( './locator.js' ) ;
6
+
7
+ class Server {
8
+ constructor ( ) {
9
+ const { Logger } = ServiceLocator . get ( 'logger' ) ;
10
+ this . logger = new Logger ( ) ;
11
+ }
12
+
13
+ shutdown ( ) {
14
+ this . logger . log ( 'Shutting down...' ) ;
15
+ }
16
+ }
17
+
18
+ // Usage
19
+
20
+ const server = new Server ( ) ;
21
+ server . shutdown ( ) ;
22
+ console . log ( 'Bye!' ) ;
Original file line number Diff line number Diff line change
1
+ 'use strict' ;
2
+
3
+ // Service locator
4
+
5
+ const { ServiceLocator } = require ( './locator.js' ) ;
6
+
7
+ class Server {
8
+ constructor ( ) {
9
+ const { Logger } = ServiceLocator . get ( 'logger' ) ;
10
+ this . logger = new Logger ( ) ;
11
+ }
12
+
13
+ shutdown ( ) {
14
+ this . logger . log ( 'Shutting down...' ) ;
15
+ }
16
+ }
17
+
18
+ // Usage
19
+
20
+ class Logger {
21
+ constructor ( ) {
22
+ return console ;
23
+ }
24
+ }
25
+
26
+ ServiceLocator . set ( 'logger' , { Logger } ) ;
27
+ const server = new Server ( ) ;
28
+ server . shutdown ( ) ;
29
+ console . log ( 'Bye!' ) ;
Original file line number Diff line number Diff line change
1
+ 'use strict' ;
2
+
3
+ // Closure: class factory
4
+
5
+ const createServerClass = ( dependencies ) => {
6
+ class Server {
7
+ constructor ( ) {
8
+ const { Logger } = dependencies ;
9
+ this . logger = new Logger ( ) ;
10
+ }
11
+
12
+ shutdown ( ) {
13
+ this . logger . log ( 'Shutting down...' ) ;
14
+ }
15
+ }
16
+
17
+ return Server ;
18
+ } ;
19
+
20
+ // Usage
21
+
22
+ class Logger {
23
+ constructor ( ) {
24
+ return console ;
25
+ }
26
+ }
27
+
28
+ const Server = createServerClass ( { Logger } ) ;
29
+ const server = new Server ( ) ;
30
+ server . shutdown ( ) ;
31
+ console . log ( 'Bye!' ) ;
Original file line number Diff line number Diff line change
1
+ 'use strict' ;
2
+
3
+ class ServiceLocator {
4
+ static #modules = new Map ( ) ;
5
+
6
+ static get ( moduleName ) {
7
+ return ServiceLocator . #modules. get ( moduleName ) ;
8
+ }
9
+
10
+ static set ( moduleName , exp ) {
11
+ ServiceLocator . #modules. set ( moduleName , exp ) ;
12
+ }
13
+ }
14
+
15
+ const logger = require ( './logger.js' ) ;
16
+ ServiceLocator . set ( 'logger' , logger ) ;
17
+
18
+ module . exports = { ServiceLocator } ;
19
+
20
+ // Alternative implementations:
21
+ // https://github.com/HowProgrammingWorks/ServiceLocator
Original file line number Diff line number Diff line change
1
+ 'use strict' ;
2
+
3
+ class Logger {
4
+ log ( message ) {
5
+ process . stdout . write ( message + '\n' ) ;
6
+ }
7
+ }
8
+
9
+ module . exports = { Logger } ;
You can’t perform that action at this time.
0 commit comments