Я пытаюсь улучшить качество своего кода, применяя шаблоны объектно-ориентированного проектирования.
У меня есть следующий класс Python, который отвечает за подключение к указанному FTP-серверу и загрузку ресурса с него. server.
Функция «connect» - единственная функция, которая будет отличаться в разных реализациях, так как учетные данные для входа и сервер будут разными.
class FtpResourceRetriever:
def __init__(self):
self.ftp = None
def connect(self):
# This implementation will be different for each concrete class
self.ftp = FTP()
def list_dir(self):
# Implementation will be identical across classes
self.ftp...
pass
def download_resource(self, resource_name: str):
# Implementation will be identical across classes
self.ftp...
pass
def quit(self):
# Implementation will be identical across classes
self.ftp...
pass
Я рассмотрел использование шаблона Strategy иметь интерфейс «ConnectBehaviour» и затем реализовывать конкретные классы «ConnectBehaviour»; однако, поскольку мне нужно установить self.ftp
в методе «connect» (что является побочным эффектом в классе «FtpResourceRetriever»), подход Стратегия не кажется мне полностью правильным. Это правда?
Какой шаблон мне следует использовать в этом случае? Примеры кода действительно go могли бы значительно улучшить мое понимание.