Skip to content

Commit a744b76

Browse files
added Template Method
1 parent e41a7f1 commit a744b76

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

behavioral/template-method/App.ts

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { LoggerTemplate, EmailLogger, FileLogger } from "./Templates";
2+
3+
export default class TemplateEx {
4+
5+
logger1: LoggerTemplate;
6+
logger2: LoggerTemplate;
7+
8+
constructor(){
9+
10+
this.logger1 = new EmailLogger("john@doe.com","error");
11+
this.logger2 = new FileLogger("/logs/app.log","debug");
12+
this.run(false);
13+
this.run(true);
14+
}
15+
16+
run(runningInContainer: boolean): void {
17+
18+
console.log("---");
19+
if(runningInContainer){
20+
this.logger1.log("[FATAL] App crashed");
21+
}
22+
else{
23+
this.logger2.log("[INFO] App started");
24+
this.logger2.log("[FATAL] App crashed");
25+
}
26+
27+
}
28+
}
+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
export abstract class LoggerTemplate {
2+
3+
loglevel: string;
4+
5+
constructor(_loglevel: string) {
6+
this.loglevel = _loglevel;
7+
}
8+
9+
abstract log(message: string): void;
10+
}
11+
12+
export class FileLogger extends LoggerTemplate {
13+
14+
private path: string;
15+
16+
constructor(_path: string, _loglevel: string) {
17+
super(_loglevel);
18+
this.path = _path;
19+
}
20+
21+
log(message: string): void {
22+
console.log(`Message '${message}' written to ${this.path}`);
23+
}
24+
}
25+
26+
export class EmailLogger extends LoggerTemplate {
27+
28+
private email: string;
29+
30+
constructor(_email: string, _loglevel: string) {
31+
super(_loglevel);
32+
this.email = _email;
33+
}
34+
35+
log(message: string): void {
36+
console.log(`Message '${message}' sent to ${this.email}`);
37+
}
38+
}

0 commit comments

Comments
 (0)