无设计不开发Android开发中的IOC
Posted 民间闲散程序员
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无设计不开发Android开发中的IOC相关的知识,希望对你有一定的参考价值。
民间闲散程序员
关注
做过后端开发的人,一般都会非常熟悉IOC(控制反转),其实在android开发中,也经常用到这一概念,只是大家不了解。
先说一下概念,控制反转,顾名思义,就是控制权的反转,那什么是控制权呢?
看一下下面这个例子(最近总有开发者反馈我举例子不好理解,那我就从实际开发中找例子吧):
在我们日常开发中可能会使用各类的三方库(分享,推送,图片加载等)。今天我们就说一下推送吧,现在市场上有两个比较有名的推送,友盟推送,和极光推送,我们先从极光推送说起。
产品有一个需求,要求加一个推送功能,我选择了极光。(为了方便代码演示,我把代码做了简化,推送有两个接口,一个初始化,一个推送):
首先进行了初始化,然后点击调用推送接口,当然程序中可能会在很多地方调用这个推送功能。看上去这段代码貌似没有问题。
接着产品,看到了我加的推送功能,要求我不要使用极光推送,要求使用友盟推送。很显然,我需要把JiGuangPush改为UmengPush,但是这样,要改的地方会有很多,所有调用的地方都需要改,如果对于一个庞大的程序而言,这个显然是很麻烦的。
代码直接控制推送,也就使代码与推送之间产生了耦合,一旦推送需求发生变化,要改的地方是不可估量的。
那应该如何修改呢?
代码直接控制(调用)推送,代码也就依赖极光推送,根据设计模式,我们的代码尽量去依赖抽象而不是具体。
有了这个思路我们可以先想一下,推送功能一般都需要初始化和推送两个接口,不管需要的参数是什么,但是这个两个接口是确定,好了,我们可以先设计接口:
public interface Ipush {
public void init();
public void push();
}
我们在程序中显然不能直接调用接口的方法,所以需要一个类去管理推送。
通过这个Manager类对推送进行控制即可,我们的代码不需要管push了,直接调用
manager.push();
即可。这样就直接把控制权,从整个代码交给了PushManager类。
这样我们程序各处调用推送的地方只管调用PushManager.push即可,不需要管里面是如何实现的。
我们需要做的只有在程序的一开始,注入对应的push实现就可以了。
精彩推荐
• end •
作者 | mymdeep
以上是关于无设计不开发Android开发中的IOC的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | Visual Studio 中 SDK 和 NDK 安装位置 )(代码片段