对依赖注入的一些理解

今天在公司没事,顺手翻了下同事一本strtus2的书。这种前端MVC框架简直渣的不行,怪不得SSH是外包公司专用呢。Java开发者很奇怪的一个想法就是总想用JAVA语言和xml标签解决一切事情,却反而把很多事情变得更加复杂、繁琐、无法通用和定制。至少struts2的前后端耦合实在严重,非要用java解决本该在浏览器客户端解决的事情,关键是还做不好。

不过JAVA框架的设计模式还是很值的学习,今天略微看了一下依赖注入dependency injection.

如果有两个组件A和B,且A依赖于B(B是A的一个依赖)。在A中使用B就需要取得B的一个实例。

public class A {
     public void depOnB() {
         B b = new B();
         b.xxxxx();
     }
}
A依赖于B,就需要在A中初始化B的一个实例。但是B很可能是有多种实现,一般情况下可以用一个工厂类来产生,但是需要写比较复杂繁琐的代码。这个时候就可以在A中创造一个B的构造器。就可以从A的外部获得B的类型,然后在A中使用B的实例。


如:

public class PersistenceManager {
    public void store(Object object) {
        DataSource datasource = ...//obtain datasource
        try {
             Connection con = datasource.getConnection();
            //....
        } catch (sqlException e) {

        }
    }
}
这个例子中需要实例datasouce,我们可以提供一个接受依赖关系的构造器
<pre name="code" class="java">public class PersistenceManager {
    private DataSource datasource;
    public PersistenceManager(DataSource datasource) {
         this.datasource = datasource;
    }
    public void store(Object object) {
     
        try {
             Connection con = datasource.getConnection();
            //....
        } catch (sqlException e) {

        }
    }
}

相关文章

适配器模式将一个类的接口转换成客户期望的另一个接口,使得原本接口不兼容的类可以相互合作。
策略模式定义了一系列算法族,并封装在类中,它们之间可以互相替换,此模式让算法的变化独立于使用算法...
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,它是针对软件开发中经常遇到的一些设计问题...
模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,使得子类可以在不改变算法结...
迭代器模式提供了一种方法,用于遍历集合对象中的元素,而又不暴露其内部的细节。
外观模式又叫门面模式,它提供了一个统一的(高层)接口,用来访问子系统中的一群接口,使得子系统更容...