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

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 类型的类,这些类基本上只执行一个操作.

P.S 这可能是一个不好的例子,但想不出更好的例子了。另外,这个问题并没有特别提到Python,只是用它来代表例子。

请您参考如下方法:

合成器就是答案。 您必须保留接口(interface),而实现会消耗两个实例(通常通过构造函数) - 并在它们上触发适当的方法。


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!