-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAbstractFactoryTask.txt
More file actions
97 lines (77 loc) · 5.82 KB
/
AbstractFactoryTask.txt
File metadata and controls
97 lines (77 loc) · 5.82 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
Abstract Factory идеально подходит для ситуаций,
когда нужно создавать семейства связанных объектов,
но конкретные типы определяются во время выполнения
(например, выбор фракции, расы, провайдера услуг).
Задача: "Система экипировки героя для разных фракций"
Контекст:
Ты разрабатываешь RPG, в которой игрок может выбрать одну из фракций перед началом игры.
Каждая фракция предлагает свой уникальный набор экипировки для стартового героя:
- Люди (Human): Меч, Кожаная броня, Целебное зелье
- Эльфы (Elf): Лук, Легкая броня, Эликсир маны
- Орки (Orc): Топор, Тяжелая броня, Зелье ярости
Геймдизайнер хочет, чтобы система была гибкой:
если в будущем добавят новую фракцию (например, Гномов),
код не должен меняться в существующих местах создания экипировки.
Твоя задача:
Реализовать систему с использованием паттерна Abstract Factory, которая:
1. Определяет интерфейсы для семейства объектов (оружие, броня, расходуемый предмет).
2. Создает конкретные фабрики для каждой фракции.
3. Позволяет получить полный набор экипировки для выбранной фракции.
Требования:
1. Создай иерархию продуктов (объектов, которые создаются):
- Интерфейс IWeapon с методом void Attack() (выводит в консоль описание атаки)
- Интерфейс IArmor с методом void Defend() (выводит описание защиты)
- Интерфейс IConsumable с методом void Use() (выводит описание использования)
2. Создай конкретные реализации для каждой фракции:
Фракция | Оружие | Броня | Расходуемый предмет
Human | Sword | LeatherArmor | HealingPotion
Elf | Bow | LightArmor | ManaElixir
Orc | Axe | HeavyArmor | RagePotion
Каждый класс должен реализовать свой интерфейс и в методах выводить характерное сообщение.
3. Создай Abstract Factory:
- Интерфейс IEquipmentFactory с методами:
- IWeapon CreateWeapon()
- IArmor CreateArmor()
- IConsumable CreateConsumable()
4. Создай конкретные фабрики:
- HumanEquipmentFactory
- ElfEquipmentFactory
- OrcEquipmentFactory
5. Создай класс Hero (не фабрику!), который:
- Принимает в конструкторе IEquipmentFactory
- Хранит ссылки на созданные оружие, броню и расходуемый предмет
- Имеет метод ShowEquipment(), который выводит всю экипировку героя
- Имеет метод UseConsumable(), который использует расходуемый предмет
6. В Main продемонстрируй работу:
- Создай героев для каждой фракции
- Покажи их экипировку
- Покажи использование расходуемого предмета каждым героем
Ожидаемый пример вывода:
=== Герой фракции Люди ===
Экипировка:
- Меч: наносит рубящий удар!
- Кожаная броня: защищает от легких ударов.
- Целебное зелье: восстанавливает 50 HP.
Использование предмета:
Восстанавливает 50 HP.
=== Герой фракции Эльфы ===
Экипировка:
- Лук: выпускает стрелу с расстояния!
- Легкая броня: позволяет уклоняться от атак.
- Эликсир маны: восстанавливает 30 MP.
Использование предмета:
Восстанавливает 30 MP.
=== Герой фракции Орки ===
Экипировка:
- Топор: наносит мощный рубящий удар!
- Тяжелая броня: поглощает большую часть урона.
- Зелье ярости: увеличивает урон на 50% на 10 секунд.
Использование предмета:
Увеличивает урон на 50% на 10 секунд.
Бонус-задание (если будет легко):
Добавь фабрику для новой фракции Undead (Нежить):
- Оружие: Scythe (Коса) - "наносит проклятый удар!"
- Броня: RottenArmor (Гнилая броня) - "отпугивает врагов своим видом."
- Расходуемый: PotionOfDecay (Зелье распада) - "наносит урон врагу со временем."
Покажи, что для добавления новой фракции не пришлось менять
существующий код класса Hero - только добавить новые классы и фабрику.