利用命令设计模式消除重复cod

2024-05-18 05:12:46 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个可以创建和删除文件的程序。我有两种不同的方法来实现这一点-要么执行外部实用程序,它们已经处理了这些操作,要么在我的程序中实现创建和删除。我想两者都有选择,并在运行时动态地选择适当的一个。所以我会有类似的接口和实现:

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

这样,我可以在运行时选择其中一个并使用它。但是,如果我决定创建另一个实现,它是ExecFileImplFile之间的混合,那么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的类,这些类基本上只执行一个操作。你知道吗

这也许是个坏例子,但想不出更好的例子了。另外,这个问题并不特别涉及Python,只是用它来表示示例。你知道吗


Tags: andefcreatepassimplementcalldeleteexternal