首先:
1.依賴注入就是一種在一個需要使用它的類中定義一個介面,該類中不管這個介面是怎麼實現的,只是執行這個方法
2.依賴注入可以讓該類實現通用
程式碼:
1.定義一個飲料介面
1 package cn.lonecloud.model; 2 /** 3 * 建立一個食物介面 4 * @Title: IDrink.java 5 * @Package cn.lonecloud 6 * @Description: 7 * @author lonecloud 8 * @date 2016年10月4日 上午9:39:31 9 */ 10 public interface IDrink { 11 public void drink(); 12 }
2.書寫它的實現類
1 package cn.lonecloud.model; 2 3 4 /** 5 * 牛奶 6 * @Title: milk.java 7 * @Package cn.lonecloud 8 * @Description: 9 * @author lonecloud 10 * @date 2016年10月4日 上午9:42:17 11 */ 12 public class Milk implements IDrink { 13 14 @Override 15 public void drink() { 16 // TODO Auto-generated method stub 17 System.out.println("喝牛奶"); 18 } 19 20 21 }
1 package cn.lonecloud.model; 2 3 4 public class Water implements IDrink { 5 6 @Override 7 public void drink() { 8 // TODO Auto-generated method stub 9 System.out.println("喝水"); 10 } 11 12 }
1 package cn.lonecloud.model; 2 3 public class Coffee implements IDrink { 4 5 @Override 6 public void drink() { 7 // TODO Auto-generated method stub 8 System.out.println("喝的是咖啡"); 9 } 10 11 }
這三個實現類是對這個飲料介面的實現
3.書寫顧客類
1 package cn.lonecloud; 2 3 import cn.lonecloud.model.IDrink; 4 5 /** 6 * 顧客類 7 * @Title: Customer.java 8 * @Package cn.lonecloud 9 * @Description: 10 * @author loneloud 11 * @date 2016年10月4日 上午9:47:32 12 */ 13 public class Customer { 14 /** 15 * 使用這個進行將酒依賴注入到顧客的飲料中 16 * @param myDrink 17 */ 18 public Customer(IDrink myDrink) { 19 // TODO Auto-generated constructor stub 20 this.myDrink=myDrink; 21 } 22 public Customer() { 23 // TODO Auto-generated constructor stub 24 } 25 public void sendDrink(IDrink drink){ 26 this.myDrink=drink; 27 } 28 /** 29 * 顧客選擇要喝的飲料 30 */ 31 private IDrink myDrink; 32 /** 33 * 顧客喝飲料 34 * @Description: 35 */ 36 public void drinking(){ 37 myDrink.drink(); 38 } 39 }
顧客喝飲料,定義介面然後可以採用定義方法或者構造方法對這個飲料進行實現。
5.測試方法
1 package cn.lonecloud; 2 3 import org.junit.Test; 4 5 import cn.lonecloud.model.Coffee; 6 import cn.lonecloud.model.IDrink; 7 8 public class CustomerTest { 9 10 /** 11 * 使用這種的話可以使得顧客類變成通用 12 * @Description: 13 */ 14 @Test 15 public void testByConstract(){ 16 IDrink drink=new Coffee(); 17 //這裡可以實現對飲料的注入 18 Customer customer=new Customer(drink); 19 customer.drinking(); 20 } 21 /** 22 * 使用方法體進行注入 23 * @Description: 24 */ 25 @Test 26 public void testByMethod(){ 27 IDrink drink=new Coffee(); 28 Customer customer=new Customer(); 29 //這裡可以實現對飲料的注入 30 customer.sendDrink(drink); 31 customer.drinking(); 32 } 33 }