我有一个应用程序,我们打算使用外部库。此外部库是提供相同(或类似)功能的众多外部库之一。
以一个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库(假设说)。
哪种设计模式可以帮助解决这种情况?
答案 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将是一个不错的选择。