自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

設(shè)計模式6大原則:依賴倒置原則

開發(fā) 后端
而依賴倒置原則的本質(zhì)騎士就是通過抽象(抽象類或接口)使各個類或模塊的實現(xiàn)彼此獨立,不相互影響,實現(xiàn)模塊間的松耦合。但是這個原則也是6個設(shè)計原則中最難以實現(xiàn)的了,如果沒有實現(xiàn)這個原則,那么也就意味著開閉原則(對擴(kuò)展開發(fā),對修改關(guān)閉)也無法實現(xiàn)。

依賴倒置原則(Dependence Inversion Principle),簡稱DIP

定義

High level modules should depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions.

1、高層模塊不應(yīng)該依賴低層模塊,兩者都應(yīng)該依賴于抽象(抽象類或接口)

2、抽象(抽象類或接口)不應(yīng)該依賴于細(xì)節(jié)(具體實現(xiàn)類)

3、細(xì)節(jié)(具體實現(xiàn)類)應(yīng)該依賴抽象

抽象:即抽象類或接口,兩者是不能夠?qū)嵗摹?/p>

細(xì)節(jié):即具體的實現(xiàn)類,實現(xiàn)接口或者繼承抽象類所產(chǎn)生的類,兩者可以通過關(guān)鍵字new直接被實例化。

而依賴倒置原則的本質(zhì)騎士就是通過抽象(抽象類或接口)使各個類或模塊的實現(xiàn)彼此獨立,不相互影響,實現(xiàn)模塊間的松耦合。但是這個原則也是6個設(shè)計原則中最難以實現(xiàn)的了,如果沒有實現(xiàn)這個原則,那么也就意味著開閉原則(對擴(kuò)展開發(fā),對修改關(guān)閉)也無法實現(xiàn)。

依賴倒置有三種方式來實現(xiàn)

1、通過構(gòu)造函數(shù)傳遞依賴對象

比如在構(gòu)造函數(shù)中的需要傳遞的參數(shù)是抽象類或接口的方式實現(xiàn)。

2、通過setter方法傳遞依賴對象

即在我們設(shè)置的setXXX方法中的參數(shù)為抽象類或接口,來實現(xiàn)傳遞依賴對象

3、接口聲明實現(xiàn)依賴對象

例如下面的例子

涂涂是個女僧

  1. public class Tutu {  
  2.     //涂涂是個女孩,會煮面  
  3.     public void cook(Noodles noodles)  
  4.     {  
  5.         noodles.eat();  
  6.     }  

面條(目前只會煮面)

  1. public class Noodles {  
  2.     //吃面條  
  3.     public void eat()  
  4.     {  
  5.         System.out.println("涂涂吃面條...");  
  6.     }  

涂涂坐在家里吃面(場景類)

  1. public class Home {  
  2.     public static void main(String args[])  
  3.     {  
  4.         Tutu tutu = new Tutu();  
  5.         Noodles food = new Noodles();  
  6.         tutu.cook(food);  
  7.     }  

運行結(jié)果:涂涂吃面條...

但是這有個問題,涂涂只會做面條,不可能每次都吃面條吧,天天吃面吃死你,所以在上面的Tutu類中的cook方法中,如果涂涂會做其他吃的,那豈不是更好。于是她向家庭主婦邁進(jìn)了一步,使用了依賴倒置原則。

也就是涂涂通過學(xué)習(xí)還可以燜米飯,炒魷魚(雖然聽著不爽,但是很好吃),京醬肉絲啊等等。要想在代碼中實現(xiàn),就需要實現(xiàn)兩個接口:ITutu和IFood

  1. public interface ITutu {  
  2.     //這樣就會做很多飯菜了  
  3.     public void cook(IFood food);  

實現(xiàn)類

  1. public class Tutu implements ITutu {  
  2.    
  3.     @Override 
  4.     public void cook(IFood food) {  
  5.         food.eat();  
  6.     }  
  7.    

食物接口

  1. public interface IFood {  
  2.     public void eat();  

這樣就為擴(kuò)展留出了很大的空間,方面擴(kuò)展其他的類。也不會對細(xì)節(jié)有變動。以后涂涂想吃什么學(xué)一下就可以自己做了

實現(xiàn)面條

  1. public class Noodles implements IFood {  
  2.    
  3.     @Override 
  4.     public void eat() {  
  5.         System.out.println("涂涂吃面條...");  
  6.     }  
  7.    

實現(xiàn)米飯

  1. public class Rice implements IFood {  
  2.    
  3.     @Override 
  4.     public void eat() {  
  5.         System.out.println("涂涂吃米飯(終于吃上米飯了)...");  
  6.     }  

場景類:涂涂在家里開吃了,想吃什么直接做就是了

  1. public class Home {  
  2.     public static void main(String args[])  
  3.     {  
  4.         //接口使不能實例化滴  
  5.         ITutu tutu = new Tutu();  
  6.         //實例化米飯,涂涂可以吃米飯了  
  7.         IFood rice = new Rice();  
  8.         //吃面條  
  9.         //IFood noodles = new Noodles();  
  10.         tutu.cook(rice);  
  11.     }  
  12. }   

這樣各個類或模塊的實現(xiàn)彼此獨立,不互相影響,實現(xiàn)了。

原文鏈接:http://www.cnblogs.com/loulijun/archive/2012/03/05/2380524.html

【編輯推薦】

  1. 關(guān)于讀寫鎖算法的Java實現(xiàn)及思考
  2. 6個提高Java開發(fā)者效率的工具
  3. Java并發(fā):juc Executor框架詳解
  4. 設(shè)計Java應(yīng)用程序的平滑停止
  5. Spock 0.6發(fā)布 Java測試框架
責(zé)任編輯:林師授 來源: 婁立軍的博客
相關(guān)推薦

2012-03-15 11:15:13

Java設(shè)計模式

2012-03-05 13:58:34

設(shè)計模式里氏置換

2012-03-07 11:03:13

Java設(shè)計模式

2012-03-08 10:57:00

Java設(shè)計模式

2012-03-12 16:10:26

Java設(shè)計模式

2011-09-07 09:21:01

設(shè)計模式

2015-09-23 17:12:18

API設(shè)計原則

2015-09-24 08:52:53

API設(shè)計原則

2010-05-07 17:59:05

Unix服務(wù)器

2021-07-29 14:42:55

設(shè)計模式Java

2010-09-09 13:54:06

DIV CSS

2010-03-31 17:26:52

SaaS

2024-10-14 09:52:39

軟件項目開發(fā)軟件項目估算

2011-07-19 18:13:15

高效數(shù)據(jù)庫

2020-09-18 11:25:43

智能

2019-12-27 15:16:34

設(shè)計人工智能開發(fā)

2020-06-09 07:00:00

面向?qū)ο?/a>編程編程原則

2010-09-14 13:49:38

CSS代碼

2012-02-01 13:24:37

2010-08-16 13:35:21

數(shù)據(jù)庫設(shè)計
點贊
收藏

51CTO技術(shù)棧公眾號