码迷,mamicode.com
首页 > 其他好文 > 详细

一个关于依赖注入的故事

时间:2014-07-27 21:29:05      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:

1、关于控制反转和依赖注入的理解:

控制反转:一般的,当实体类被使用时,调用者需要创建实体类的实例。控制反转的意思即是调用者不再实例化实体类了,而只是声明类对象和封装对象的使用。具体的实例化由容器来实现。
依赖注入:依赖注入是控制反转这种设计模式的一个关键步骤。把对象的实例化交给容器时,容器负责生成具体的实体类对象,并把对象注入到调用者类中,那么此时,调用者就实现了实体类的声明、定义、和使用了。

作用:达到削减计算机程序的耦合度的作用。

2、故事角色以及职责

类名 备注(职责)
seed、Pine 、Bombax 种子接口、松树类、木棉树类
Forest 森林类、调用者、控制器
Scientist 科学家类、注入器
Person 人类、客户端

3、故事背景

实体类为种子,松树,木棉树等树类,一开始种子不知道会长成什么树,但这是一颗树的种子没有错,长大后会拥有树的功能。

森林是一个控制器,被控制者为种子和树。在森林里,森林类声明了种子的身份,并封装了种子的功能,但由于还不知道是什么树的种子,所以还处于种子分类阶段。

科学家是一个可以改变种子命名的类,科学家掌控着森林里种子的命运,可以决定种子长成何种树。科学家决定种植何种树后,就到森林里往种子里面注入液体,并告知森林。

人类是种子的使用者,是执行者和种子功能的受用者。

4、一个关于依赖注入的故事

从前有一颗种子,是一棵树的种子,但它不知道是一棵什么树,但至少还有遮荫的功能。

种子接口:

 1 package story;
 2 
 3 /**
 4  * 种子接口,只知道是一颗树的种子,而树是有遮荫功能的。
 5  * 
 6  * @author Qiaofengbo
 7  * 
 8  */
 9 public interface Seed {
10 
11     static final String name = "树";
12 
13     void function();
14 }

它在想,它有可能是一棵松树,将来长成一棵参天大树;也可能是一棵木棉树,即可遮荫,花还能入药……
松树类:

 1 package story;
 2 
 3 public class Pine implements Seed {
 4     /**
 5      * 松树类,有遮荫功能
 6      */
 7     public void function() {
 8         // TODO Auto-generated method stub
 9         System.out.println("我是松树");
10     }
11 
12 }

木棉树类:

 1 package story;
 2 
 3 public class Bombax implements Seed {
 4     /**
 5      * 木棉树类,有遮荫功能
 6      */
 7     public void function() {
 8         // TODO Auto-generated method stub
 9 
10         System.out.println("我是木棉树");
11     }
12 
13 }

作为一棵树,森林才是它们的主场。就像战场是士兵的归宿一样。所以它来到了森林。森林对所有的种子都有管理的能力,并且分区栽种各种树。

森林类:

 1 package story;
 2 
 3 /**
 4  * 森林类,种子重在森林里,是什么树的种子不那么重要,有遮荫功能就行
 5  * 
 6  * @author Qiaofengbo
 7  * 
 8  */
 9 public class Forest {
10 
11     private Seed seed;
12 
13     public Seed getSeed() {
14         return seed;
15     }
16 
17     public void setSeed(Seed seed) {
18         this.seed = seed;
19     }
20 
21     /**
22      * 种植松树种子
23      */
24     public void planting_Pine() {
25         seed.function();
26     }
27 
28     /**
29      * 种植木棉树种子
30      */
31     public void planting_Bombax() {
32         seed.function();
33     }
34 }

虽然森林里已经为各种树分好区域种植了,但由于不清楚种子的种类,所以需要分配好种子。
为了在规定的区域栽种树,而不出错,科学家往种子里面注入了一种决定种子种类的液体,从而百分百的决定了种子的种类。再把经过注入的种子交给森林。

科学家类:

 1 package story;
 2 
 3 /**
 4  * 科学家类,有决定种子长成什么树的能力,通过向种子注入东西改变种子
 5  * 
 6  * @author Qiaofengbo
 7  * 
 8  */
 9 public class Scientist {
10 
11     public static Forest injection_Pine() {
12         Seed pine = new Pine();
13         Forest forest = new Forest();
14         // 注入
15         forest.setSeed(pine);
16 
17         // forest.planting_Pine();
18         return forest;
19     }
20 
21     public static Forest injection_Bombax() {
22         Seed bombax = new Bombax();
23         Forest forest = new Forest();
24         forest.setSeed(bombax);
25         // forest.planting_Bombax();
26         return forest;
27     }
28 }

人类从森林的规定区域去种子栽种,种出来的树就是想要得到的树。

人类:

 1 package story;
 2 
 3 /**
 4  * 人类,决定科学家注入什么给种子
 5  * 
 6  * @author Qiaofengbo
 7  * 
 8  */
 9 public class Person {
10 
11     public static void main(String args[]) {
12         planting();
13     }
14 
15     public static void planting() {
16         Forest forest = Scientist.injection_Bombax();
17         // 开始种植
18         forest.planting_Pine();
19     }
20 }

 

一个关于依赖注入的故事

标签:

原文地址:http://www.cnblogs.com/TimeStory/p/3871024.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!