您的位置:首页 > 其它

Launcher中采用的设计模式

2015-08-25 22:59 309 查看
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足够复杂,需要分开进行开发的时候,引入设计模式,才会有意义。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: