-
Notifications
You must be signed in to change notification settings - Fork 0
/
6.js
64 lines (56 loc) · 3.62 KB
/
6.js
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
// Стратегія (Strategy) — це патерн програмування, який дозволяє визначати різні алгоритми та забезпечує можливість обміну їх під час виконання програми.
// Клас Basket представляє кошик для покупок з певною стратегією знижки
class Basket {
// Створимо конструктор приймає, що стратегію знижки discountPlan як параметр
constructor(discountPlan) {
// Властивість discountPlan отримує значення стратегії знижки, яке було передано конструктору
this.discountPlan = discountPlan;
// Створюємо новий пустий масив для зберігання товарів (goods) в кошику
this.goods = [];
}
// Робимо метод addGood, що приймає один параметр - good, який потрібно додати до масиву
addGood(good) {
// Додаємо новий товар в масив товарів
this.goods.push(good);
}
// Робимо метод calculateTotalPrice, що розраховує загальну вартість товарів в кошику з урахуванням знижки
calculateTotalPrice() {
// За допомогою метода reduce ми сумуємо вартість всіх товарів в масиві
const price = this.goods.reduce((acc, prod) => acc + prod.price, 0);
// Застосовуємо знижку до загальної вартості за допомогою метода applyDiscount нашого об'єкта discountPlan
return this.discountPlan.applyDiscount(price);
}
}
// Клас RegularDiscountPlan: стратегія знижки для постійних клієнтів
class RegularDiscountPlan extends Basket {
// Робимо метод applyDiscount, що приймає ціну price як параметр
applyDiscount(price) {
// Повертає ціну з урахуванням знижки в 10% price * 0.9
return price * 0.9;
}
}
//Клас VIPDiscountPlan: стратегія знижки для VIP клієнтів
class VIPDiscountPlan extends Basket {
// Робимо метод applyDiscount, що приймає ціну price як параметр
applyDiscount(price) {
// Повертає ціну з урахуванням знижки в 20% price * 0.8
return price * 0.8;
}
}
// Клас NewClientDiscountPlan: стратегія знижки для нових клієнтів
class NewClientDiscountPlan extends Basket {
// Робимо метод applyDiscount, що приймає ціну price як параметр
applyDiscount(price) {
// Повертає ціну з урахуванням знижки в 5% price * 0.95
return price * 0.95;
}
}
console.log("Завдання 6 ====================================");
// Після виконання розкоментуйте код нижче
// Створення нового екземпляру кошика зі стратегією знижки для нових клієнтів
const basket1 = new Basket(new NewClientDiscountPlan());
// Додавання товарів до кошика
basket1.addGood({ name: "Product 1", price: 100 });
basket1.addGood({ name: "Product 2", price: 50 });
// Розрахунок і виведення загальної вартості товарів з урахуванням знижки
console.log(basket1.calculateTotalPrice());