环境:Android 7.1.1 Source Code —— Camera2
一.策略模式
在CameraActivity.java中,将Camera2OneCameraOpener&Camera2OneCameraManager的实例化放到OneCameraModule.java中,运用了取变封装原则,自身仅提供interface OneCameraOpener和interface OneCameraManager,将OneCameraOpener&OneCameraManager的实例化分离出去,降低耦合性与依赖度,采用与OneCameraModule组合的方式,增加了系统的弹性。
CameraActivity.java
public class CameraActivity extends QuickActivity
implements AppController, CameraAgent.CameraOpenCallback,
ShareActionProvider.OnShareTargetSelectedListener {
...
mOneCameraOpener = OneCameraModule.provideOneCameraOpener(
mFeatureConfig,
mAppContext,
mActiveCameraDeviceTracker,
ResolutionUtil.getDisplayMetrics(this));
mOneCameraManager = OneCameraModule.provideOneCameraManager();
...
}
OneCameraModule.java
public final class OneCameraModule {
private OneCameraModule(){}
public static OneCameraOpener provideOneCameraOpener(
OneCameraFeatureConfig featureConfig,
Context context,
ActiveCameraDeviceTracker activeCameraDeviceTracker,
DisplayMetrics displayMetrics) throws OneCameraException {
Optional<OneCameraOpener> manager = Camera2OneCameraOpenerImpl.create(
featureConfig, context, activeCameraDeviceTracker, displayMetrics);
if (!manager.isPresent()) {
manager = LegacyOneCameraOpenerImpl.create();
}
if (!manager.isPresent()) {
throw new OneCameraException("No camera manager is available.");
}
r