Skip to content

Commit 65bcf10

Browse files
committed
Add JavaScript examples
1 parent 4164faa commit 65bcf10

9 files changed

+189
-0
lines changed

JavaScript/1-callback.js

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
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+
});

JavaScript/2-revealing.js

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
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!');

JavaScript/3-injection.js

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
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!');

JavaScript/4-module.js

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
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!');

JavaScript/5-locator.js

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
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!');

JavaScript/6-subst.js

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
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!');

JavaScript/7-closure.js

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
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!');

JavaScript/locator.js

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
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

JavaScript/logger.js

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
'use strict';
2+
3+
class Logger {
4+
log(message) {
5+
process.stdout.write(message + '\n');
6+
}
7+
}
8+
9+
module.exports = { Logger };

0 commit comments

Comments
 (0)