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),队友挖的坑, ...
随机推荐
- SVN下Update出现代码文件删除状态问题
有时候在SVN上更新了代码,发觉别人提交的东西,服务上明明就是有,但本机却空空如也.只好打开 "Repo-browser",从服务器上强拉下来.结果图标显示红叉,显示为删除状态. ...
- UVA 437 The Tower of Babylon巴比伦塔
题意:有n(n≤30)种立方体,每种有无穷多个.要求选一些立方体摞成一根尽量高的柱子(可以自行选择哪一条边作为高),使得每个立方体的底面长宽分别严格小于它下方立方体的底面长宽. 评测地址:http:/ ...
- ubuntu中查看已安装软件包的方法
ubuntu中查看已安装软件包的方法: 方法一:在新立得软件包管理器中,打到已安装,便可以看看有多少包被安装. 如果想把这些包的信息复制到一文件里,可用下面的方法. 方法二:在终端输入 sudo dp ...
- python set dict tuple and list
1 set 1.1 不变集合,frozenset 也就是说,集合中的元素不能删除,也不能增加. 1.2 两个集合之间的关系 isdisjoint()函数. 2 各个数据结构的不同显示 2.1 set ...
- iptraf 网卡 ip 端口 监控 netstat 关闭端口方法
18 commands to monitor network bandwidth on Linux server – BinaryTides https://www.binarytides.com/l ...
- HTML5中meta属性
meta属性在HTML中占据了很重要的位置.如:针对搜索引擎的SEO,文档的字符编码,设置刷新缓存等.虽然一些网页可能没有使用meta,但是作为正规军,我们还是有必要了解一些meta的属性,并且能够熟 ...
- Fri Jul 28 16:28:52 CST 2017 WARN: Establishing SSL connection without server’s identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection mus
Fri Jul 28 16:28:52 CST 2017 WARN: Establishing SSL connection without server’s identity verificatio ...
- mysql15--垂直分表水平分表
分表技术(表的结构不能变) 分表技术有(水平分割和垂直分割) 当一张越来越大时候,即使添加索引还慢的话,我们可以使用分表 以qq用户表来具体的说明一下分表的操作. 思路如图 : 首先我创建三张表 u ...
- linux下的git安装及配置
一.yum安装方式 1.安装 $ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel $ yum -y ...
- bzoj4196 [Noi2015]软件包管理器——树链剖分
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4196 树链剖分. 代码如下: #include<iostream> #inclu ...