在 shell脚本里使用Abstract Factory的设计模式

在不同的平台下,我需要定义一个函数,of,其作用是在命令行下用系统定义的图形程序打开某个文件或URL。

比如,of .在Windows平台下应该用Explorer打开当前目录,而在Linux平台下应该用nautilus打开当前目录。

我需要一个工厂虚类,其实就是文件。在linux下,这个工厂有一个实类,同时也有一个对象,那就是我的.bashrc-linux;而在Windows下呢,那就是我的.bashrc-windows。哦,不好意思,我在Windows下在用的是Cygwin。所以也可以使用bash。

在.bashrc-linux这个工厂里,我们这样创建of

function of() {
    gnome-open "$@" > /dev/null 2>&1
}

而在.bashrc-windows这个工厂里,我们这样创建of

function of() {
     gnome-open "$@" > /dev/null 2>&1
}

在.bashrc里,我们这样决定要用哪个工厂:

if test `uname` = Linux; then
    factory=~/.bashrc-linux
else
    factory=~/.bashrc-windows
fi

然后,我们让工厂去创建我们想要的对象:

. $factory

哈哈,设计模式有何难哉!

Leave a comment