如何在单个应用程序中封装对类似外部库的访问?

时间:2011-11-29 14:37:57

标签: c# design-patterns dependencies

我有一个应用程序,我们打算使用外部库。此外部库是提供相同(或类似)功能的众多外部库之一。

以一个zip库为例,有很多库基本上做同样的事情,提取和压缩zip文件。

但是,即使内部压缩算法相同,每个库也会实现彼此略有不同的公共类/接口,例如

namespace AmazingZipLibrary
{
    public class Archive
    {
        public Zip Add()
        {
          //Create a zip file
        }
    }
}

namespace YetAnotherAmazingZipLibrary
{
    public class Zip
    {
        public object Compress()
        {
          //create a zip file
        }
    }
}

每次我们想要交换或使用其他库时,如何在不破坏主应用程序的情况下交替使用库?我认为这种要求的主要原因是评估和测试目的。但也有可能出现一个我们想要采用的新的坏屁股zip库(假设说)。

哪种设计模式可以帮助解决这种情况?

2 个答案:

答案 0 :(得分:3)

使用所需方法创建自己的界面。

为每个库实现此接口,并使用您的调用包装库功能。

interface ICompress
{
  void Create();
}

public class AmazingCompressor : ICompress
{
   public void Create()
   {
      // Call AmazingZipLibrary.Add
   }
}

public class YetAnotherAmazingCompressor : ICompress
{
   public void Create()
   {
      // Call YetAnotherAmazingZipLibrary.Compress
   }
}

在您的代码中,只能引用ICompress

这称为bridge pattern

答案 1 :(得分:1)

Bridge design pattern将是一个不错的选择。