我正在尝试在我的计算机视觉应用程序中练习良好的解耦结构。由于我使用的是包装本机OpenCV例程的.net库(EMGU.CV),我需要使用C#接口来抽象出EMGU类,以便将来能够替换它们。
一个具体的例子是:
在EMGU中,我有一个前景检测器类,它暴露Image<T,T>
类。这个电话纯粹是以EMGU为导向的。
我正在为我的应用程序开发IBackgroundDetector,这可能会支持不同的背景探测器,包括EMGU。
所以对于我界面中的方法
interface IBackgroundDetector
{
SomeGeneralImageType GetCurrentBackgroundFrame(SomeGeneralImage CameraFrame);
}
如何创建此SomeGeneralImageType
课程以获得良好的架构?
答案 0 :(得分:0)
我们的想法是创建一个名为ISomeGeneralImageType
的接口
声明一组图像所需的方法(查看C#的 Image 作为您可能需要的示例)
然后,对于您创建的每个Image类型,只需继承接口ISomeGeneralImageType
并实现方法。
你这样做的方法是使用封装来隐藏你通常会做的所有复杂的东西。
例如(我真的不知道你对象的真实界面,这只是为了表明这个想法):
interface ISomeGeneralImageType
{
void SetHeight(int height);
Byte[] GetBitBuffer();
}
class ImageEMGU : ISomeGeneralImageType
{
private Image<T,T> innerImage;
public override Byte[] GetBitBuffer()
{
innerImage.GetMeSomeBits()
}
public override SetHeight(int height)
{
innerImage.EMGUHight(height);
}
}
然后,您可以在任何实现界面的图像上使用背景探测器:
interface IBackgroundDetector
{
SomeGeneralImageType GetCurrentBackgroundFrame(ISomeGeneralImage CameraFrame);
}