Skip to content

Commit 605963c

Browse files
committed
factory method
1 parent 6beb513 commit 605963c

File tree

6 files changed

+235
-334
lines changed

6 files changed

+235
-334
lines changed

2_creational/01_factory/README.md

Lines changed: 0 additions & 119 deletions
This file was deleted.

2_creational/01_factory/solution.py

Lines changed: 0 additions & 171 deletions
This file was deleted.
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# 🏭 Factory Method - Bronie RPG
2+
3+
**Poziom**: łatwy
4+
**Cel**: Factory Method - podklasy decydują co stworzyć
5+
6+
## 🎯 Zadanie
7+
Zaimplementuj wzorzec Factory Method dla systemu broni w grze RPG. Każda postać (Warrior, Mage, Archer) tworzy swoją unikalną broń poprzez nadpisanie metody `create_weapon()`.
8+
9+
## 📋 Wymagania
10+
- [ ] Przechodzą doctesty
11+
- [ ] Przechodzą testy jednostkowe (pytest)
12+
- [ ] `Character` jest klasą abstrakcyjną z metodą `create_weapon()`
13+
- [ ] Każda podklasa `Character` implementuje `create_weapon()` (Factory Method)
14+
15+
## 🚀 Jak zacząć
16+
1. Otwórz `starter.py`
17+
2. Uruchom testy (powinny failować):
18+
- Doctests: `python -m doctest starter.py -v`
19+
- Pytest: `pytest` (lub `pytest -v` dla bardziej szczegółowego outputu)
20+
3. Klasy broni (`Sword`, `Staff`, `Bow`) są już gotowe (STEP 1-2)
21+
4. Zaimplementuj klasę `Character` (STEP 3)
22+
- Klasa abstrakcyjna z konstruktorem przyjmującym `name: str`
23+
- Abstrakcyjna metoda `create_weapon()` (Factory Method)
24+
- Metoda `attack()` używająca `create_weapon()`
25+
5. Zaimplementuj klasy postaci: `Warrior`, `Mage`, `Archer` (STEP 4)
26+
- Każda dziedziczy po `Character`
27+
- Nadpisz metodę `create_weapon()` - każda zwraca odpowiednią broń
28+
6. Uruchom testy ponownie (teraz powinny przejść)
29+
7. Gdy wszystkie testy przechodzą:
30+
```bash
31+
git add .
32+
git commit -m "Complete Lab XX - Factory Method"
33+
git push
34+
```
35+
8. Sprawdź wynik w GitHub Actions
36+
37+
## 💡 Factory Method w pigułce
38+
39+
**Factory Method deleguje tworzenie obiektów do podklas**
40+
41+
### Jak to działa:
42+
1. Klasa bazowa (`Character`) definiuje abstrakcyjną metodę `create_weapon()`
43+
2. Podklasy (`Warrior`, `Mage`, `Archer`) nadpisują tę metodę
44+
3. Każda podklasa decyduje co stworzyć (Sword, Staff, Bow)
45+
46+
### Kluczowy moment:
47+
```python
48+
def attack(self) -> str:
49+
weapon = self.create_weapon() # Wywołanie factory method
50+
# Character nie wie jaka broń zostanie stworzona!
51+
```
52+
53+
- `Warrior.create_weapon()` → zwraca `Sword`
54+
- `Mage.create_weapon()` → zwraca `Staff`
55+
- `Archer.create_weapon()` → zwraca `Bow`
56+
57+
---
58+
59+
### ❌ Bez wzorca (Simple Factory):
60+
```python
61+
def create_weapon(character_type):
62+
if character_type == "warrior":
63+
return Sword()
64+
elif character_type == "mage":
65+
return Staff()
66+
# Nowa postać = edycja if/elif ❌
67+
```
68+
69+
### ✅ Z wzorcem (Factory Method):
70+
```python
71+
class Paladin(Character):
72+
def create_weapon(self):
73+
return Mace()
74+
# Nowa postać = nowa klasa, zero zmian w istniejącym kodzie ✅
75+
```
76+
77+
**Korzyść**: Open/Closed Principle - dodawanie bez modyfikacji.

0 commit comments

Comments
 (0)