Skip to content

Commit 667be58

Browse files
committed
Use cached instances in PadCalculatorSelector and AlignmentMarkerStrategy
1 parent cf1a7e6 commit 667be58

2 files changed

Lines changed: 40 additions & 19 deletions

File tree

src/padCalculation/padCalculatorSelector.ts

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,29 +6,41 @@ import * as CenterAlignment from "./center";
66
import { Alignment } from "../models/alignment";
77

88
export class PadCalculatorSelector {
9-
public select(table: Table, column: number) : BasePadCalculator {
9+
private static readonly leftFirstColumn = new LeftAlignment.FirstColumnPadCalculator();
10+
private static readonly leftMiddleColumn = new LeftAlignment.MiddleColumnPadCalculator();
11+
private static readonly leftLastColumn = new LeftAlignment.LastColumnPadCalculator();
12+
13+
private static readonly centerFirstColumn = new CenterAlignment.FirstColumnPadCalculator();
14+
private static readonly centerMiddleColumn = new CenterAlignment.MiddleColumnPadCalculator();
15+
private static readonly centerLastColumn = new CenterAlignment.LastColumnPadCalculator();
16+
17+
private static readonly rightFirstColumn = new RightAlignment.FirstColumnPadCalculator();
18+
private static readonly rightMiddleColumn = new RightAlignment.MiddleColumnPadCalculator();
19+
private static readonly rightLastColumn = new RightAlignment.LastColumnPadCalculator();
20+
21+
public select(table: Table, column: number) : BasePadCalculator {
1022
switch (table.alignments[column]) {
1123
case Alignment.Center: return this.centerAlignmentPadCalculator(table, column);
1224
case Alignment.Right: return this.rightAlignmentPadCalculator(table, column);
1325
default: return this.leftAlignmentPadCalculator(table, column);
1426
}
1527
}
1628

17-
private leftAlignmentPadCalculator(table: Table, column: number) : BasePadCalculator {
18-
if (column == 0) return new LeftAlignment.FirstColumnPadCalculator();
19-
if (column == table.columnCount - 1) return new LeftAlignment.LastColumnPadCalculator();
20-
return new LeftAlignment.MiddleColumnPadCalculator();
29+
private leftAlignmentPadCalculator(table: Table, column: number) : BasePadCalculator {
30+
if (column == 0) return PadCalculatorSelector.leftFirstColumn;
31+
if (column == table.columnCount - 1) return PadCalculatorSelector.leftLastColumn;
32+
return PadCalculatorSelector.leftMiddleColumn;
2133
}
2234

23-
private centerAlignmentPadCalculator(table: Table, column: number) : BasePadCalculator {
24-
if (column == 0) return new CenterAlignment.FirstColumnPadCalculator();
25-
if (column == table.columnCount - 1) return new CenterAlignment.LastColumnPadCalculator();
26-
return new CenterAlignment.MiddleColumnPadCalculator();
35+
private centerAlignmentPadCalculator(table: Table, column: number) : BasePadCalculator {
36+
if (column == 0) return PadCalculatorSelector.centerFirstColumn;
37+
if (column == table.columnCount - 1) return PadCalculatorSelector.centerLastColumn;
38+
return PadCalculatorSelector.centerMiddleColumn;
2739
}
2840

29-
private rightAlignmentPadCalculator(table: Table, column: number) : BasePadCalculator {
30-
if (column == 0) return new RightAlignment.FirstColumnPadCalculator();
31-
if (column == table.columnCount - 1) return new RightAlignment.LastColumnPadCalculator();
32-
return new RightAlignment.MiddleColumnPadCalculator();
41+
private rightAlignmentPadCalculator(table: Table, column: number) : BasePadCalculator {
42+
if (column == 0) return PadCalculatorSelector.rightFirstColumn;
43+
if (column == table.columnCount - 1) return PadCalculatorSelector.rightLastColumn;
44+
return PadCalculatorSelector.rightMiddleColumn;
3345
}
3446
}
Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,25 @@
11
import { Alignment } from "../../models/alignment";
22
import { IAlignmentMarker, LeftAlignmentMarker, RightAlignmentMarker, CenterAlignmentMarker, NotSetAlignmentMarker } from ".";
33

4-
54
export class AlignmentMarkerStrategy {
6-
constructor(private _markerChar: string) { }
5+
private readonly _leftMarker: IAlignmentMarker;
6+
private readonly _rightMarker: IAlignmentMarker;
7+
private readonly _centerMarker: IAlignmentMarker;
8+
private readonly _notSetMarker: IAlignmentMarker;
9+
10+
constructor(private _markerChar: string) {
11+
this._leftMarker = new LeftAlignmentMarker(this._markerChar);
12+
this._rightMarker = new RightAlignmentMarker(this._markerChar);
13+
this._centerMarker = new CenterAlignmentMarker(this._markerChar);
14+
this._notSetMarker = new NotSetAlignmentMarker();
15+
}
716

817
public markerFor(alignment: Alignment): IAlignmentMarker {
918
switch (alignment) {
10-
case Alignment.Left: return new LeftAlignmentMarker(this._markerChar);
11-
case Alignment.Right: return new RightAlignmentMarker(this._markerChar);
12-
case Alignment.Center: return new CenterAlignmentMarker(this._markerChar);
13-
default: return new NotSetAlignmentMarker();
19+
case Alignment.Left: return this._leftMarker;
20+
case Alignment.Right: return this._rightMarker;
21+
case Alignment.Center: return this._centerMarker;
22+
default: return this._notSetMarker;
1423
}
1524
}
1625
}

0 commit comments

Comments
 (0)