29 lines
1.5 KiB
Python
29 lines
1.5 KiB
Python
from abc import ABC, abstractmethod
|
||
class ITransport(ABC): # Интерфейс для транспорта
|
||
@abstractmethod
|
||
def drive(self): pass
|
||
###
|
||
class Auto(ITransport): # класс машины с реализацией метода drive
|
||
def drive(self): print("Машина едет по дороге")
|
||
###
|
||
class Driver: # Класс водителя
|
||
def travel(self, transport: ITransport): transport.drive()
|
||
###
|
||
class IAnimal(ABC): # Интерфейс животного
|
||
@abstractmethod
|
||
def move(self): pass
|
||
###
|
||
class Camel(IAnimal): # Класс верблюда
|
||
def move(self): print("Верблюд идет по пескам пустыни")
|
||
###
|
||
class CamelToTransportAdapter(ITransport): # Адаптер от Camel к ITransport
|
||
def __init__(self, camel: Camel): self.camel = camel
|
||
def drive(self): self.camel.move()
|
||
|
||
driver = Driver() # Создаю путешественника
|
||
auto = Auto() # Создаю машину
|
||
driver.travel(auto) # Отправляемся в путешествие на машине (использует метод drive у транспорта)
|
||
camel = Camel() # Встретились пески, надо использовать верблюда
|
||
camel_transport = CamelToTransportAdapter(camel) # Используем адаптер, по другому реализующий метод drive
|
||
driver.travel(camel_transport) # Продолжаем путь по пескам пустыни на верблюде
|