Допустим, у меня есть программа, которая может создавать и удалять файлы.И у меня есть 2 разных способа сделать это - либо запустить внешние утилиты, которые уже имеют дело с этими действиями, либо реализовать создание и удаление из моей программы.Я хочу выбрать оба варианта и выбрать подходящий динамически во время выполнения.Таким образом, у меня были бы интерфейсы и реализации, подобные этому:
class IFile:
def create():
pass
def delete():
pass
class ExecFile(IFile):
def create():
# Call an external executable
def delete():
# Call an external executable
class ImplFile(IFile):
def create():
# Implement creation of the file
def delete():
# Implement deletion of the file
Таким образом, я могу выбрать любой из них во время выполнения и использовать его.Но что, если я решу создать другую реализацию, представляющую собой смесь между ExecFile
и ImplFile
, поэтому функция create()
будет такой же, как в ExecFile
, но будет удалена так же, как в ImplFile
(или некоторых другихих сочетание).Я подумал о решении этой проблемы с использованием шаблона проектирования команд и сделал что-то вроде следующего:
class IFile:
def create():
pass
def delete():
pass
class IFileAction:
def exec():
pass
class ExecCreateFile(IFileAction):
def exec():
# Call an external executable to create file
class ImplCreateFile(IFileAction):
def exec():
# Implement creation of the file
class ExecDeleteFile(IFileAction):
def exec():
# Call an external executable to delete file
class ImplDeleteFile(IFileAction):
def exec():
# Implement deletion of the file
class ExecFile(IFile):
def create():
ExecCreateFile().exec()
def delete():
ExecDeleteFile().exec()
class ImplFileIFile(IFile):
def create():
ImplCreateFile().exec()
def delete():
ImplDeleteFile().exec()
class ExecImplFile(IFile):
def create():
ExecCreateFile().exec()
def delete():
ImplDeleteFile().exec()
Вопрос: было бы целесообразно использовать этот шаблон проектирования в данном конкретном случае, или что-то лучше можно было бы сделать?Единственное, что меня беспокоит, это то, что если бы пример был более сложным, скажем, я добавил опцию, чтобы получить размер файла, получить владельца файла и т. Д., Я бы закончил тем, что создал несколько классов типа IFileAction, которые в основном выполняют только одно действие.
PS Это может быть плохой пример, но не мог придумать ничего лучшего.Кроме того, вопрос не относится конкретно к Python, просто использовал его для представления примера.