簡體   English   中英

當一個實現類是強制性的並綁定到接口契約時,如何使用Java中的接口實現松散耦合?

[英]How is loose coupling achieved using interfaces in Java when an implementation class is mandatory and bound to interface contract?

無論如何,當我們必須創建一個實現類時,松散耦合如何與接口相關聯? 實現類被強制實現接口中定義的所有方法。 我不明白這是如何允許失去耦合的? 我是面向對象編程和軟件設計的新手,所以如果你能對這個主題有所了解,那將會非常有用。 一個例子就是錦上添花。

關鍵是接口不僅允許你編寫一個實現它的類,它允許你寫幾個。

當您擁有通過使用接口與類交互的代碼時,該代碼能夠與實現所述接口的任何類一起工作,而不管它如何實現它。 這允許您將不同的類提供給相同的代碼而無需修改它。

請注意,接口不是達到松散耦合組件的唯一方法。 松散耦合僅意味着組件能夠一起工作而不會假設彼此的內部工作。 這樣做是因為您的組件越多地將對方視為黑盒子,就越容易在一個組件上進行更改而不影響任何其他組件。 接口可以是實現這一目標的一種工具,但它們都不是必需的,它們也不是唯一值得一提的工具。

實現類能夠選擇如何實現該功能。

public interface PersonRepository {
    Person getPerson(String name);
}

可以通過讀取CSV文件或查詢數據庫來實現。 需要這個人的對象並不關心這個人是如何被發現或裝載的。

因此,它被認為是松散耦合的。

如果它是緊密耦合的,則需要知道如何構造SQL查詢或讀取CSV文件。

客戶端代碼耦合到接口。 它沒有與實現相結合。 您可以在不編譯客戶端代碼或界面的情況下更改實現。

http://en.wikipedia.org/wiki/Dependency_inversion_principlehttp://en.wikipedia.org/wiki/Open/closed_principle

可能在下面的解釋可以回答這個:

進入A類,我們需要B類的對象。如果將B直接暴露在A中則意味着存在緊耦合。 例如:可以在B或其他任何東西中添加更多方法。 這意味着A的行為可以基於B的更多暴露而改變。但是如果B類正在實現任何接口並且我們將接口的ref傳遞給A.意味着B類中的任何變化進一步用戶A類不會因為我們使用而煩惱用於訪問B的接口的ref,僅獲得所需的訪問權限。 例如:A類{public void add(B b){// Implementation}} B類{

    }
            this is Tight coupling. Because user can make any changes to class B which are directly exposed to class A and this defines Tight Coupling(Greater the exposure of depending Object , more Tight Coupling).  To resolve this one refer :
    Interface L{

    }
    class B implements L{}
    class A{
        public void add(L  b){
            // Implementation
        }
    }

        Since we are passing the ref of Interface L, adding changes into Implementation of B will not make any difference to class A.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM