Какой объектно-ориентированный шаблон проектирования идеален для класса с методом, который вызывает побочные эффекты, но реализуется по-разному в разных классах? - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь улучшить качество своего кода, применяя шаблоны объектно-ориентированного проектирования.

У меня есть следующий класс 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 могли бы значительно улучшить мое понимание.

...