Launcher中采用的设计模式

Launcher总体采用了MVC模式,具体的介绍摘自别人博客的一段

转载自ANDROID2.3 Launcher源码分析-MVC

Launcher从总体架构上来看采用了MVC模式。其中Launcher.java为控制器,LauncherModel为模型;XML界面配置文件为视图,其中Workspace为视图容器。模型中操作数据库模型,保持数据模型和数据库的一致。控制器同步视图和模型,视图和模型之间不直接关联,通过唯一通过控制器发生关联。

举个例子,当Gallery.apk应用被删除时,数据模型(LauncherModel)接收到ACTION_PACKAGE_REMOVED消息,然后在消息处理中,从数据模型中删除该应用的信息,从数据库记录中删除该应用的信息,然后通过回调(Callbacks)去更新视图(Workspace),而这个回调就是在Launcher中实现的。(LauncherModel——>Launcher(回调)——>Workspace)

再举一个例子,当Gallery应用移动位置时,假设有空位置可以移动,Gallery应用从原位置移动到目标位置过程。View处理移动事件,Controller 将DragTarget设置为数据模型(LauncherModel)。所以最终触发数据模型的放置动作,数据判断有无空位置放置,如果有成功放置,更新该应用的数据模型和数据库记录。 (Workspace——>Launcher(回调)——>LauncherModel)

那能不能将Launcher从MVC模式变更到MVP模式呢?如果可以的话,该怎么变更呢?

先对比一下MVC、MVP
参考这篇文章Android MVP 探究与总结

MVC:
这里写图片描述
MVP:
这里写图片描述
通过与MVP结构图对比着看可以发现:

在MVC结构中,Model是可以直接被View操作的。其实这就是MVP与MVC最大的一个区别。
MVP有什么用?
或者可以这样问MVP有什么好处?为什么要使用MVP?
其实通过上面的几张图就不难看出
- MVP抽离了显示层和逻辑层,降低了耦合
- MVP结构层次更清晰,可以轻易实现View替换却不带动逻辑层变动。
- MVP逻辑层是针对接口编程,他更方便于进行单元测试。
其实,说这么多,都是因为显示层与逻辑层分离带来地便利。

都说MVP抽离了层结构,降低了耦合度,那么它到离是如何抽离的?当然是通过接口了。Java中interface的理解以及定义的初衷,无非是考虑三点:

 1. 接口由谁实现
 2. 接口给谁回调
 3. 接口函数中更改了谁的状态

这三点明确了,就比较容易理解这MVC,MVP的设计模式了。

再来看看Launcher的Workspace(V)和LauncherModel(M)是否有耦合的关系,我们好将其进行分离。

interface LauncherViewInterface {
    public Workspace getWorkspace();
    public Hotseat getHostseat();
}

interface LauncherModelInterface {
    public void startLoader();
}

public LauncherPresenter implements LauncherModeInterface {
    public startLoader() {
        mLauncherModel.startLoader();
    }
}

class Launcher implements LauncherModelInterface {
    private Workspace mWorkspace;
    priavte Hotseat mHotseat;
    public void onCreate() {
        mWorkspace = (Workspace)this.findViewById....
        mHotseat = (Hotseat)this.findViewById...
    }
    public Workspace getWorkspace() {
        return mWorkspace;
    }
    public Hotseat getHostseat() {
        return mHotseat;
    }
}

在Launcher.java中,使用接口封装View,让Model层在Presenter中通过View的接口,访问Workspace和Hottest,这么做有什么意义呢?其实一点意义也没有,MVP是为了隔离Model和View之间的关联,只有在View足够复杂,需要分开进行开发的时候,引入设计模式,才会有意义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值