我需要在Windows Phone 8的默认相机类之上创建一个Camera类,PhotoCaptureDevice
理想情况下,我想要建立一个子类
class CustomCaptureDevice:PhotoCaptureDevice{
....
....
}
这将允许我配置相机设备,并通过CustomCaptureDevice提供一些额外的帧处理技术。不幸的是,PhotoCaptureDevice
是sealed class
,因此我不能这样做。
现在我可以想出两种可以帮助我解决问题的替代方法:
(1)
class CustomCaptureDevice
{
private PhotoCaptureDevice captureDevice;
// Implement all the functions of PhotoCaptureDevice here. And internally redirect them to PhotoCaptureDevice
}
上述方法过于繁琐。如果对PhotoCaptureDevice进行任何API更改,可能需要对CustomCaptureDevice类进行重大更新。
(2)
class CustomCaptureDevice
{
public PhotoCaptureDevice captureDevice;
// Expose this variable to the user, who can set things in PhotoCaptureDevice as per his needs.
}
以上似乎是一个更简单的解决方案,因为如果对PhotoCaptureDevice进行API更改,它将需要最少的更新。
似乎(2)可以很好地满足我的要求。但我有一个额外的要求,因为(2)可能证明不合适。我想在PhotoCaptureDevice中禁用某些配置功能,因为我想保留一些参数,如曝光和焦点,用户无法配置。
我如何在(2)的设计框架中实现这一点。它有可能吗?
据我所知,方法(1)很容易实现。请注意PhotoCaptureDevice
是密封类的约束。
答案 0 :(得分:0)
第一种方法通常称为decorator pattern(即包装器)。我相信这正是您需要的东西,因为它允许您为引擎下的给定接口提供任何功能。
要使类与应用程序的其他部分中的PhotoCaptureDevice
互换,您必须实现其相关接口:
public class ExtendedPhotoCaptureDevice : IDisposable, ICameraCaptureDevice
{
private readonly ICameraCaptureDevice _actualImplementation;
...
}