Какие паттерны соответствуют принципам SOLID
Python
Senior
Без компании
Какие паттерны соответствуют принципам SOLID
Ответы
**Single Responsibility Principle (SRP)**
Каждый класс должен иметь одну ответственность. Пример:
```
class User:
def __init__(self, name):
self.name = name
class UserDB:
def save(self, user):
print(f"Saving {user.name} to DB")
```
**Open-Closed Principle (OCP)**
Классы открыты для расширения, но закрыты для модификации. Пример:
```
class Discount:
def apply(self, price):
return price
class VIPDiscount(Discount):
def apply(self, price):
return price * 0.8
```
**Liskov Substitution Principle (LSP)**
Подклассы должны заменять базовые классы. Пример:
```
class Bird:
def fly(self):
pass
class Duck(Bird):
def fly(self):
print("Duck flying")
# Не нарушает LSP
```
**Interface Segregation Principle (ISP)**
Много специализированных интерфейсов лучше одного общего. Пример:
```
class Printer:
def print(self):
pass
class Scanner:
def scan(self):
pass
# Вместо одного интерфейса с print() и scan()
```
**Dependency Inversion Principle (DIP)**
Зависимости на абстракциях, а не на деталях. Пример:
```
class Database(ABC):
@abstractmethod
def connect(self):
pass
class MySQL(Database):
def connect(self):
print("MySQL connection")
class App:
def __init__(self, db: Database):
self.db = db
```