首页 > 代码库 > 一个关于依赖注入的故事

一个关于依赖注入的故事

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 }

 

一个关于依赖注入的故事