惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Attack and Defense Labs
Attack and Defense Labs
T
Threatpost
C
Cybersecurity and Infrastructure Security Agency CISA
H
Hackread – Cybersecurity News, Data Breaches, AI and More
I
Intezer
C
Cyber Attacks, Cyber Crime and Cyber Security
The Register - Security
The Register - Security
量子位
Security Latest
Security Latest
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
C
CXSECURITY Database RSS Feed - CXSecurity.com
MyScale Blog
MyScale Blog
J
Java Code Geeks
Apple Machine Learning Research
Apple Machine Learning Research
Google DeepMind News
Google DeepMind News
WordPress大学
WordPress大学
Spread Privacy
Spread Privacy
Jina AI
Jina AI
博客园 - 【当耐特】
P
Palo Alto Networks Blog
Last Week in AI
Last Week in AI
SecWiki News
SecWiki News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
G
GRAHAM CLULEY
宝玉的分享
宝玉的分享
Hacker News - Newest:
Hacker News - Newest: "LLM"
T
The Blog of Author Tim Ferriss
V
Vulnerabilities – Threatpost
有赞技术团队
有赞技术团队
T
Tor Project blog
H
Hacker News: Front Page
A
Arctic Wolf
NISL@THU
NISL@THU
A
About on SuperTechFans
云风的 BLOG
云风的 BLOG
Engineering at Meta
Engineering at Meta
V
V2EX
N
News and Events Feed by Topic
Webroot Blog
Webroot Blog
Know Your Adversary
Know Your Adversary
P
Privacy International News Feed
I
InfoQ
D
Docker
L
LINUX DO - 最新话题
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
U
Unit 42

博客园 - 纯爷们

很久没有在这里写东西了 HR Blogs 申请计数器 名人Blog 企业信息管理师教程 经理人的知识结构 北大商学网 IT从业人员必看的10大论坛(ZT) 常用句型 韩非子.八经 信息系统规划(ISP)之BSP Multidimensional Analysis 24 Principle A piecture of J2EE Core Patterns .NET商业应用架构所要解决的若干问题(浅水滩 ) 产品需求与客户需求(探讨可扩展性的实现) 企业信息化建设的瞎想(CIO Hatcher Team) 企业信息化建设的瞎想 企业信息化规划与设计(CSDN 腾远方聊天记录) CRM学习笔记(二)
Dependence Injection
纯爷们 · 2005-01-24 · via 博客园 - 纯爷们

        Dependence Injection (依赖注入)这一名词在几天前我还没有听说过,第一次看到她是在自己拿到《程序员》2005第一期的时候在一篇“依赖倒置、控制反转、依赖注入”的文章中看到的。今天花了点时间看了看Martin fowler的Inversion of Control Containers and the Dependency Injection pattern,收获不小,对以前学J2EE时对容器实现的疑惑也有了一点理解,如果工作时间允许的话,下一步也想花点时间研究一下几个开源容器的实现,在这方面有经验的兄弟们望不吝赐教:)

        其实无论IoC还是依赖注入,都是为了满足面向对象设计的依赖倒置原则,依赖注入所注入的对象通常是个可变因素,所以如果不采用注入的手法,那只能在调用者内部进行强行的持有对象的实例,正如在以前的一篇

State模式与Strategy模式 中所述的在State模式一样,因为环境可能是一直在变的,那么如果我们想要实现操作随环境的变化而产生不同的行为的话,在环境类中持有具体状态实例是不可行的(具体状态模式参见状态模式),因为它违反了“依赖于抽象,而不依赖与抽象的实现”的设计原则。所以采取的方式如下:

        在上面的代码中,State是一个抽象类,所有状态的实现均继承自该类,所以在可变的环境类(即上面代码中的Context类)中依赖关系是在Context类以及State类之间,在这里依赖注入体现在了构造函数中传入一个状态对象,这种依赖注入的方式称之为构造子注入(Constructor Injection),后通过一个State属性来实现设置注入依赖(Setter Injection)。当然这两种依赖注入方式可能结合起来使用,适用的情况是实现方式复杂多变、而且会发生来回的迁移,比如状态模式。如果只是单纯为了可扩展,为了消除代码的Bad Smell情况那么个人认为用构造子依赖注入即可,比如在策略模式中的使用,见拙文策略模式以及策略模式与模板方法的结合 ,还有另外一中依赖注入方式叫接口注入(Interface Injection)但个人感觉用起来不是很直观也稍显烦琐。 

        其实我个人的理解还显得很稚嫩,欢迎大家指点:)