-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathparametr_abc.ts
More file actions
146 lines (123 loc) · 3.79 KB
/
parametr_abc.ts
File metadata and controls
146 lines (123 loc) · 3.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
enum FurnitureStyle {
MODERN = "сучасний",
VICTORIAN = "вікторіанський"
}
class ModernChair {
sitOn(): void {
console.log("Сидіння на сучасному стільці: зручно, мінімалістично");
}
hasLegs(): boolean {
return true;
}
getStyle(): string {
return FurnitureStyle.MODERN;
}
}
class ModernTable {
putOn(item: string): void {
console.log(`Розміщення ${item} на сучасному столі зі скляною поверхнею`);
}
getStyle(): string {
return FurnitureStyle.MODERN;
}
getNumberOfLegs(): number {
return 4;
}
}
class ModernSofa {
lieOn(): void {
console.log("Лежання на сучасному дивані: комфортно, низько до підлоги");
}
getSeatingCapacity(): number {
return 3;
}
getStyle(): string {
return FurnitureStyle.MODERN;
}
}
class VictorianChair {
sitOn(): void {
console.log("Сидіння на вікторіанському стільці: вишукано, з прямою спинкою");
}
hasLegs(): boolean {
return true;
}
getStyle(): string {
return FurnitureStyle.VICTORIAN;
}
}
class VictorianTable {
putOn(item: string): void {
console.log(`Розміщення ${item} на вікторіанському столі з дерев'яною різьбленою поверхнею`);
}
getStyle(): string {
return FurnitureStyle.VICTORIAN;
}
getNumberOfLegs(): number {
return 4;
}
}
class VictorianSofa {
lieOn(): void {
console.log("Лежання на вікторіанському дивані: елегантно, з високими підлокітниками");
}
getSeatingCapacity(): number {
return 2;
}
getStyle(): string {
return FurnitureStyle.VICTORIAN;
}
}
class ConfigurableFurnitureFactory {
private style: FurnitureStyle;
constructor(style: FurnitureStyle) {
this.style = style;
}
setStyle(style: FurnitureStyle): void {
this.style = style;
console.log(`Фабрику переналаштовано на стиль: ${style}`);
}
createChair() {
if (this.style === FurnitureStyle.MODERN) {
return new ModernChair();
} else if (this.style === FurnitureStyle.VICTORIAN) {
return new VictorianChair();
}
throw new Error(`Unsupported style: ${this.style}`);
}
createTable() {
if (this.style === FurnitureStyle.MODERN) {
return new ModernTable();
} else if (this.style === FurnitureStyle.VICTORIAN) {
return new VictorianTable();
}
throw new Error(`Unsupported style: ${this.style}`);
}
createSofa() {
if (this.style === FurnitureStyle.MODERN) {
return new ModernSofa();
} else if (this.style === FurnitureStyle.VICTORIAN) {
return new VictorianSofa();
}
throw new Error(`Unsupported style: ${this.style}`);
}
}
function furnishLivingRoom(factory: ConfigurableFurnitureFactory): void {
console.log("Обладнання вітальні...");
const chair = factory.createChair();
const table = factory.createTable();
const sofa = factory.createSofa();
console.log(`Стиль меблів: ${chair.getStyle()}`);
chair.sitOn();
table.putOn("ваза з квітами");
sofa.lieOn();
console.log(`Диван вміщує ${sofa.getSeatingCapacity()} осіб`);
console.log(`Стіл має ${table.getNumberOfLegs()} ніжки`);
console.log("------------------------");
}
const factory = new ConfigurableFurnitureFactory(FurnitureStyle.MODERN);
console.log("Створення сучасної вітальні:");
furnishLivingRoom(factory);
factory.setStyle(FurnitureStyle.VICTORIAN);
console.log("\nСтворення вікторіанської вітальні:");
furnishLivingRoom(factory);