看类图关系,一个MovieList类引用一个IMoveFinder对象,ImoveFinder有一个FindAll()的方法,此例中由SimpleMovieFinder 实现。实际上就是由SimpleMovieFinder 实现ImoveFinder接口,而MovieLister只知道ImoveFinder接口,是运行时动态确定ImoveFinder究竟是怎么实现的。

 几本思想就是:多态 +  面向接口编程

 

在Spring .Net中是用  Injection 的方式实现的。把 MovieList看作一个容器,在Config中声明。

 <objects xmlns="http://www.springframework.net">

    <object name="MyMovieLister"
      type
="Spring.Examples.MovieFinder.MovieLister, Spring.Examples.MovieFinder">
    </object>
  </objects>
 
 把SimpleMovieFinder作为Inject(注入)MovieList的对象。也在Config中声明
<object name="MyMovieFinder"
        type
="Spring.Examples.MovieFinder.SimpleMovieFinder, Spring.Examples.MovieFinder"/>

 </object>


把两个对象关联起来,在Config中完整的配置如下

<objects xmlns="http://www.springframework.net">
    <object name="MyMovieLister"
      type
="Spring.Examples.MovieFinder.MovieLister, Spring.Examples.MovieFinder">
        <!-- using setter injection... -->
        <property name="movieFinder" ref="MyMovieFinder"/>
    </object>
    <object name="MyMovieFinder"
        type
="Spring.Examples.MovieFinder.SimpleMovieFinder, Spring.Examples.MovieFinder"/>
    </object>

</objects>  


  <property name="movieFinder" ref="MyMovieFinder"/>

是根据 MovieLister的属性来配置的

 

private IMovieFinder _movieFinder; 

public IMovieFinder MovieFinder

        {
            get
            {
                return _movieFinder;
            }
            set
            {
                _movieFinder = value;
            }
        }

 

 MovieLister 中IMovieFinder 的一个引用,需要做的就是把一个IMovieFinder 的实现注入给它,就是用注入的对象实例化这个接口。

 

有人可能问了:这个用代码的方式也很容易实现,为啥要用配置的方式呢?我也刚看了一小会,知道究竟怎么个回事了再说!

 

或者哪位大师知道用配置方式实现的好处,可以先透露一下!! 

 
 
posted on 2012-06-09 21:33  DongD  阅读(286)  评论(0编辑  收藏  举报