Camera安卓源码剖析-源码中的设计模式实例

本文深入剖析Android 7.1.1 Camera2源码,探讨策略模式在CameraActivity中的应用,如何降低耦合性;观察者模式在相机预览状态监听中的实践,实现松耦合;抽象工厂模式在创建相关对象家族中的作用;以及装饰者模式如何动态扩展对象功能。通过实例讲解,加深对设计模式的理解。
摘要由CSDN通过智能技术生成

环境:Android 7.1.1 Source Code —— Camera2

一.策略模式

在CameraActivity.java中,将Camera2OneCameraOpener&Camera2OneCameraManager的实例化放到OneCameraModule.java中,运用了取变封装原则,自身仅提供interface OneCameraOpener和interface OneCameraManager,将OneCameraOpener&OneCameraManager的实例化分离出去,降低耦合性与依赖度,采用与OneCameraModule组合的方式,增加了系统的弹性。
clms

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值