无设计不开发Android开发中的IOC

Posted 民间闲散程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无设计不开发Android开发中的IOC相关的知识,希望对你有一定的参考价值。


【无设计不开发】Android开发中的IOC

民间闲散程序员

关注

【无设计不开发】Android开发中的IOC

做过后端开发的人,一般都会非常熟悉IOC(控制反转),其实在android开发中,也经常用到这一概念,只是大家不了解。

先说一下概念,控制反转,顾名思义,就是控制权的反转,那什么是控制权呢?

看一下下面这个例子(最近总有开发者反馈我举例子不好理解,那我就从实际开发中找例子吧):

在我们日常开发中可能会使用各类的三方库(分享,推送,图片加载等)。今天我们就说一下推送吧,现在市场上有两个比较有名的推送,友盟推送,和极光推送,我们先从极光推送说起。

产品有一个需求,要求加一个推送功能,我选择了极光。(为了方便代码演示,我把代码做了简化,推送有两个接口,一个初始化,一个推送):

【无设计不开发】Android开发中的IOC

首先进行了初始化,然后点击调用推送接口,当然程序中可能会在很多地方调用这个推送功能。看上去这段代码貌似没有问题。

接着产品,看到了我加的推送功能,要求我不要使用极光推送,要求使用友盟推送。很显然,我需要把JiGuangPush改为UmengPush,但是这样,要改的地方会有很多,所有调用的地方都需要改,如果对于一个庞大的程序而言,这个显然是很麻烦的。

代码直接控制推送,也就使代码与推送之间产生了耦合,一旦推送需求发生变化,要改的地方是不可估量的。

那应该如何修改呢?

代码直接控制(调用)推送,代码也就依赖极光推送,根据设计模式,我们的代码尽量去依赖抽象而不是具体。

有了这个思路我们可以先想一下,推送功能一般都需要初始化和推送两个接口,不管需要的参数是什么,但是这个两个接口是确定,好了,我们可以先设计接口:

public interface Ipush {
   public void init();
   public void push();
}

我们在程序中显然不能直接调用接口的方法,所以需要一个类去管理推送。

【无设计不开发】Android开发中的IOC

通过这个Manager类对推送进行控制即可,我们的代码不需要管push了,直接调用

manager.push();

即可。这样就直接把控制权,从整个代码交给了PushManager类。

这样我们程序各处调用推送的地方只管调用PushManager.push即可,不需要管里面是如何实现的。

我们需要做的只有在程序的一开始,注入对应的push实现就可以了。

【无设计不开发】Android开发中的IOC

这样不管产品的需求怎么变,我们只需要在程序的开头改一次即可,不需要每一次都修改调用的地方。

【无设计不开发】Android开发中的IOC

精彩推荐

【无设计不开发】Android开发中的IOC





 • end • 

             作者 | mymdeep


【无设计不开发】Android开发中的IOC






以上是关于无设计不开发Android开发中的IOC的主要内容,如果未能解决你的问题,请参考以下文章

Android开发——UI_片段

Android开发常用代码片段

高效Web开发的10个jQuery代码片段

Android 逆向Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | Visual Studio 中 SDK 和 NDK 安装位置 )(代码片段

开发具有多个活动或一个活动和多个片段的应用程序?

Android片段中的问题:仍然单击上一个片段