Dragger2解析(一)
依赖注入(DI-Dependency Injection)
什么是依赖注入
这是一种设计思想,一个面向对象的编程法则。
DI能够让开发者写出低耦合代码,更加优良的程序。
更容易测试,代码健壮性更强。
它能使程序的整体结构变的非常灵活。
依赖注入的好处
举个例子
人和车的关系,人有开车的技能,但是他想要开车就必须先找一辆车过来。
public class Car {
public Car() {
}
public void run() {
LogUtils.i("启动汽车");
}
}
public class People {
private Car mCar;
public People() {
mCar = new Car();
}
public void driveCar() {
mCar.run();
}
}
通过这两段代码我们可以看出来,People类依赖于Car类,我们需要如何创建一个Car出来,还需要控制何时创建。这是我们传统的写法。如果我们用了DI框架,我们只需要告诉它我们的People类需要依赖一个Car类,具体如何创建Car,何时创建Car,我们并需要知道,通过这样的操作方式我们降低了代码的耦合度,同时也告诉我们为什么叫“依赖注入”,People依赖Car,而Car又需要DI框架将自己注入到People中。
生活中的例子
在饭店未诞生之前也就是人们吃饭需要自己做饭自己找食材
后来社会出现了饭店的概念人们想吃饭只需要去饭店然后点自己想吃的饭就可以了
在后来我们有了外卖的这个概念我们不需要知道饭店在哪里,我们需要吃饭的时候只需要掏出手机点一下就可以了。
分析下三种情况
1.你需要饭怎么做 食材需要自己找(被调用者必须出现在调用者代码里面,而且你还需要知道如何构造调用者)
2.你不需要知道饭是怎么做出来的 你只需要找到饭店即可。(你不需要知道调用者如何构造,但是你自己需要找到工厂。调用者与工厂类耦合在一起)
3.你不需要饭怎么做 也不用知道饭店在哪里 当你饿的时候打开外卖APP就可以了。
(系统调用)
依赖注入的方式
- 接口注入
- 构造方法注入
- Setter 注入
以上三种方式都很简单,但要在合适的时候调用合适的方式很难掌握,需要结合项目本身多加思考,才能灵活应用。
Dragger2解析(一)的更多相关文章
- Retrofit2.0+RxJava+Dragger2实现不一样的Android网络架构搭建
Tamic :csdn http://blog.csdn.net/sk719887916 众所周知,手机APP的核心就在于调用后台接口,展示相关信息,方便我们在手机上就能和外界交互.所以APP中网络框 ...
- 基于Retrofit2.0+RxJava+Dragger2实现不一样的Android网络构架搭建(转载)
转载请注明出处:http://blog.csdn.net/finddreams/article/details/50849385#0-qzone-1-61707-d020d2d2a4e8d1a374a ...
- 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新
本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...
- .NET Core中的认证管理解析
.NET Core中的认证管理解析 0x00 问题来源 在新建.NET Core的Web项目时选择“使用个人用户账户”就可以创建一个带有用户和权限管理的项目,已经准备好了用户注册.登录等很多页面,也可 ...
- Html Agility Pack 解析Html
Hello 好久不见 哈哈,今天给大家分享一个解析Html的类库 Html Agility Pack.这个适用于想获取某网页里面的部分内容.今天就拿我的Csdn的博客列表来举例. 打开页面 用Fir ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新
上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
- 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例
前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...
- Asp.Net WebApi核心对象解析(下篇)
在接着写Asp.Net WebApi核心对象解析(下篇)之前,还是一如既往的扯扯淡,元旦刚过,整个人还是处于晕的状态,一大早就来处理系统BUG,简直是坑爹(好在没让我元旦赶过来该BUG),队友挖的坑, ...
随机推荐
- IO流(SequenceInputStream序列流--文件拆分与合并)
一.文件拆分 1.将一个文件按照规定的大小进行分割成多个文件并将被分割详细信息保存至配置信息中 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载,属性列表 ...
- oracle 10g 实例用localhost无法访问的处理
我在笔记本上安装了一个Oracle10g,安装好了之后,查看E:\oracle\product\10.2.0\db_1\network\ADMIN\tnsnames.ora文件,发现SID对应的IP地 ...
- SVN服务器端的使用
SVN服务器端的使用 1.下载VirtualSVN Server,安装好后打开,右键Repository->新建->Repository创意一个版本库.默认点击下一步,输入要创建版本库的名 ...
- java操作json
import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class ReadJson { public static v ...
- 高负载linux调优
调整Linux内核参数: # vi /etc/sysctl.conf# tells the Kernel it's ok if services bind to non-existant IP ADD ...
- YTU 2852: 二分查找
2852: 二分查找 时间限制: 1 Sec 内存限制: 128 MB 提交: 215 解决: 79 题目描述 输入不多于20个升序排列的整数,以及一个待查找的数key,输出key在序列中的位置( ...
- YTU 2801: 用数字造数字(II)
2801: 用数字造数字(II) 时间限制: 1 Sec 内存限制: 128 MB 提交: 244 解决: 168 题目描述 输入一个3位以上的整数,求其中最大的两个数字之和与最小的数字之和之间的 ...
- 并不对劲的bzoj4825:loj2018:p3721:[HNOI2017]单旋
题目大意 spaly是一种数据结构,它是只有单旋的splay 有一个初始为空的spaly,\(m\)(\(m\leq10^5\))次操作,每个操作是以下5种中的一种: 1.向spaly中插入一个数(过 ...
- 性能-发挥ORACLE分区表
ORACLE分区表发挥性能 http://www.cnblogs.com/zwl715/p/3962837.html 1.1 分区表PARTITION table 在ORACLE里如果遇到特别大的表, ...
- 博弈论中的SG函数
SG函数的定义: g(x) = mex ( sg(y) |y是x的后继结点 ) 其中mex(x)(x是一个自然是集合)函数是x关于自然数集合的补集中的最小值,比如x={0,1,2,4,6} 则mex( ...