依赖注入的简单理解
来源:互联网 发布:淘宝怎么发视频给卖家 编辑:程序博客网 时间:2024/05/24 05:06
要符合高内聚低耦合的设计原理,那么 IOC 就避免不了:
控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题.控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依赖注入应用比较广泛。
是不是感觉一脸的懵逼?哈哈,其实字面上我也没理解。
我觉得依赖注入:
就是你要什么,我就给你注入什么,让你用起来方便,不用考虑我给你的东西的长相或好坏。就好比公司(依赖的对象)现在需要一个程序猿(被依赖的对象),那么,只需给这个公司分配一个现成的程序猿就好了。公司不会去考虑这个程序猿是怎么来的,只考虑他会工作就行。
这是我简单的理解(嘎嘎,不知道有没有理解错,请告知),不知道此时的你有没有感觉脑袋里正在万马奔腾。。。
那来看代码:
有一个公司:Company
public class Company{ //此时需要依赖一个程序员 private Coder mCoder; public Company() { //一般情况下,都会实例化一个对象(程序猿)给他(公司)使用 this.mCoder = new Coder(); }}一个现成的程序猿:Coder
public class Coder { //此时的构造里面没有参数 public Coder() { }}
Ok,好像没毛病啊?是的,这种方式没毛病,而且是对的,但是如果现在这个Coder和以前不一样了,工资不高不来,嘎嘎(屌丝要逆袭了).....
public class Coder { //此时的构造里多了一个int型的参数 public Coder(int money) { if (15000 != money) { System.out.print("不给我15K,老子就不干..."); } }}到这里你是不是会发现,项目报错了...因为公司找你的时候没谈过这个要求。。。(无参构造的),所以现在公司就得重新找上你,并且给你想要的工资,你猜干活,哈哈。对应的变化
public class Company{ //此时需要依赖一个程序员,现在的程序猿涨价了... private Coder mCoder; public Company() { //一般情况下,都会实例化一个对象(程序猿)给他(公司)使用 this.mCoder = new Coder(15000); }}或许这里只是有一个小小的变动,你修改起来也是很方便的,感觉并无大碍,但是你有没有发现,只要这个被依赖的对象稍微有点点改变,相应的依赖这个coder的对象就要做出相应的改变,现在是只是一个公司要他,但是如果这家伙做了很多兼职,有很多公司都同时要他,那他以变化,岂不是要得一个一个的去修改这个变化。。。。10个?100个?。。。想想就好可怕。
ok,到这里,我们就使用依赖注入:(直接给他一份生死合同,哈哈,管你怎么跳,你都跳不出公司的范围,你也影响不到公司)
public class Company{ //此时需要依赖一个程序员 private Coder mCoder; public Company(Coder coder) { //现在公司只知道有这么个人会无私的奉献了,哈哈 this.mCoder = coder; }}我们将之前实例化的工作交由调用者来实现,相当一猎头(是他向公司推荐的程序猿),公司不管你猎头怎样招人,我只需要到时候你给我一个程序猿就行。
依赖注入的方式以接口的形式传递:
猎头:ICompany
public interface ICompany { //推荐程序猿 void recommendCoder(Coder coder);}公司:Company
public class Company implements ICompany{ //此时需要依赖一个程序员,现在的程序猿涨价了... private Coder mCoder; public Company() { } @Override public void recommendCoder(Coder coder) { //在这里接收由接口传递过来的coder this.mCoder = coder; }}或者不适接口的方式:(由外部调用者直接设置实例对象)
public class Company implements ICompany{ //此时需要依赖一个程序员,现在的程序猿涨价了... private Coder mCoder; public Company() { } @Override public void recommendCoder(Coder coder) { //在这里接收由接口传递过来的coder this.mCoder = coder; } //也可以由外部调用来设置coder public void setCoder(Coder coder){ mCoder = coder; }}ok,到这里,不管codder怎样的调皮,都不会影响到公司的结构。
不知道这样理解依赖注入是否正确,如果跑偏了 ,还恳请指正,不想漂的太远,嘎嘎。
推荐:
Dagger2
便是一个很好的依赖注入框架。本篇博客也是对Dagger2
学习的一个铺垫。
0 0
- 依赖注入的简单理解
- 简单的理解依赖注入
- 简单的例子理解依赖注入(PHP)
- PHP依赖注入简单理解
- 简单初步理解依赖注入
- 依赖注入的理解
- Spring 依赖注入的理解
- spring的依赖注入理解
- 对依赖注入的理解
- 依赖注入的概念理解
- 简单的模拟依赖注入
- 再谈依赖注入(依赖注入的简单实现)
- spring依赖注入和Aop的理解
- 对依赖注入的一些理解
- 对控制反转/依赖注入的理解
- 如何理解spring的依赖注入
- 对依赖注入的一些理解
- 对于IOC依赖注入的理解
- aria2 bt下载做种问题
- 没有如果
- Dell Win10 win菜单打不开修复方法
- 微信支付的2个容易混淆的问题
- 将IP以整型的方式存储到数据库中
- 依赖注入的简单理解
- ImageView详解---进阶之旅
- Mac OS 关于窗口操作的快捷键区别
- EFcore与动态模型(二)
- Android 5.0之后使用隐式Intent方式启动Service
- 问题 B: 万妖穴
- Python matplotlib绘图时汉字显示不正常
- The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes
- mule源码网站