国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

詳解Java設(shè)計模式編程中的依賴倒置原則

2019-11-26 14:38:09
字體:
供稿:網(wǎng)友

定義:
高層模塊不應(yīng)該依賴低層模塊,二者都應(yīng)該依賴其抽象;抽象不應(yīng)該依賴細節(jié);細節(jié)應(yīng)該依賴抽象。
問題由來:類A直接依賴類B,假如要將類A改為依賴類C,則必須通過修改類A的代碼來達成。這種場景下,類A一般是高層模塊,負責復(fù)雜的業(yè)務(wù)邏輯;類B和類C是低層模塊,負責基本的原子操作;假如修改類A,會給程序帶來不必要的風(fēng)險。
解決方案:將類A修改為依賴接口I,類B和類C各自實現(xiàn)接口I,類A通過接口I間接與類B或者類C發(fā)生聯(lián)系,則會大大降低修改類A的幾率。
         依賴倒置原則基于這樣一個事實:相對于細節(jié)的多變性,抽象的東西要穩(wěn)定的多。以抽象為基礎(chǔ)搭建起來的架構(gòu)比以細節(jié)為基礎(chǔ)搭建起來的架構(gòu)要穩(wěn)定的多。在java中,抽象指的是接口或者抽象類,細節(jié)就是具體的實現(xiàn)類,使用接口或者抽象類的目的是制定好規(guī)范和契約,而不去涉及任何具體的操作,把展現(xiàn)細節(jié)的任務(wù)交給他們的實現(xiàn)類去完成。
         依賴倒置原則的核心思想是面向接口編程,我們依舊用一個例子來說明面向接口編程比相對于面向?qū)崿F(xiàn)編程好在什么地方。場景是這樣的,母親給孩子講故事,只要給她一本書,她就可以照著書給孩子講故事了。

例子:
違法依賴倒置的情況

public class Student {   public void read(Book book){     System.out.println("學(xué)生開始閱讀:"+book.getName());   } }  public class Book {   public String getName() {     return "書籍";   } } 


當學(xué)生需要閱讀網(wǎng)頁時,就需要修改Student類,這是很不友好的設(shè)計。下面我們看遵守依賴倒置原則的例子。

public interface Person {   public void read(Reader reader); }  public interface Reader {   public String getName(); }  public class Student implements Person{   @Override   public void read(Reader reader) {     System.out.println("學(xué)生開始閱讀:"+reader.getName());   } }  public class Book implements Reader {   public String getName() {     return "書籍";   } }  public class Website implements Reader {   public String getName() {     return "網(wǎng)頁";   } }  public class Test {   public static void main(String[] args) {     Person student = new Student();     student.read(new Book());     student.read(new Website());   } } 


在read方法中我們使用了接口作為參數(shù)。

總結(jié):
1. 每個類最好有接口或者抽象類,或者同時接口和抽象類都有。
2. 變量聲明最好是接口或者抽象類。
3. 繼承時遵守里氏替換原則。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 东方市| 潜山县| 涞水县| 德江县| 宝丰县| 繁昌县| 泰安市| 聊城市| 子洲县| 宝应县| 开远市| 承德市| 晋州市| 杭锦后旗| 禹城市| 黔西| 马关县| 嵊州市| 综艺| 文山县| 东源县| 江西省| 四川省| 苏尼特左旗| 锡林浩特市| 西藏| 丰顺县| 柳州市| 五台县| 运城市| 海门市| 沂水县| 马山县| 嵊泗县| 青阳县| 瑞丽市| 岳普湖县| 盐池县| 全南县| 年辖:市辖区| 乐陵市|