Powershell 工厂模式作为静态方法

问题描述

我希望实现一种可以管理具有各种位置的文件的工具;本地文件、UNC 路径文件、托管在 AWS 上的文件、托管在 Synology NAS 上的文件等。这将在 PS 5.1 中使用类和许多特定模式来完成。

我的想法是我需要一个基本路径类型,它具有路径本身的属性。然后我需要从基本 Path 类继承的 UNC 路径、本地路径、AWS 路径等的类。然后我可以有一个 copy 类根据方法签名以不同的方式处理副本。因此 UNC > UNC 的处理方式与 AWS > UNC 不同。所以,策略模式。

至于路径类型,这似乎是工厂模式的地方。我在 Internet 上找到的每个工厂模式示例,在 PowerShell 中,都涉及一个专用的工厂类。但在我看来,从逻辑上讲,创建 Path 派生类的工厂可以/应该是 Path 类本身的一部分,作为静态方法。我搜索了静态工厂方法,这个概念在其他语言中有很好的文档记录,但不是 PowerShell。所以我决定尝试一下。为此,我将此作为概念证明...

class pxPath {
    hidden $_path
    
    pxPath () {}
    pxPath ([string]$path) {
        $this._path = $path
    }

    static [pxPath] Factory ([String]$path) {
        [pxPath]$newPath = [uncFileSystem]::new($path)

        return $newPath
    }
}

class uncFileSystem : pxPath {
    
    uncFileSystem ([String]$path) : base ([String]$path) {
    }
}

$testPath = [pxPath]::Factory('\\Server\folder\file.txt')
$testPath.getType().FullName
$testPath._path

它没有策略模式所需的多个派生类型,它只是创建一个派生类型。但它证明了工厂作为静态方法是有效的。

我的问题是,是否有一些我没有看到的反对这一点的论据,这解释了为什么我从未见过这样的 PowerShell 示例?这对我来说很有意义,但我从未见过它完成,这真的让我停下来。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)