2013-09-25 18 views
0

我無法弄清楚API和它的實現分離的意義(在java中)。在下面的程序中,我是否將它們分開了?如果沒有,請告訴我該怎麼做。 另外,我只是想知道如何在簡單的程序中遵循這種做法,而不是在項目中遵循它。將API與其實現分離

public class HideImplementation{ 

    private String value; 

    private String someMethod(){ 
    //some code 
    } 

    public void setValue(String value){ 
    //some code 
    } 

    public String getValue(){ 
    //some code 
    } 

    } 



class Client{ 

    public static void main(String[] args){ 
    HideImplementation obj = new HideImplementation(); 
    obj.setValue("Java"); 
    } 

    } 
+1

這個問題看起來有點過於寬泛......但是,對於分離,我認爲您需要一個接口來定義類HideImplementation的方法,該類應該實現,然後在處理時使用接口實例(例如像變量聲明) – ppeterka

+0

是的,它告訴我編程是如何工作的,如果我是專業人士。無論如何。查看遵循此設計模式的現有庫項目。例如,所有的JSR Stuff都像JPA一樣。你有JPA API,只有接口和幾個實現像Hibernate,EclipseLink等你明白嗎?這樣,其他開發人員就可以綁定到api而不必關心底層實現。一個簡短的例子很難給對不起。 –

+0

如你所做的那樣使用可見性是一種分離方式。在'interface's中定義你的API是另一種方法:在適當的公共接口中聲明你的API方法,然後將其發佈爲「API」,而你的接口的實現不受用戶API。 – JimmyB

回答

1

API是使用代碼和實現之間的契約,通常設計爲接口。

public interface Contract { 
    public void doIt(); 
} 

public class ContractImpl implements Contract { 
    public void doIt() { 
    // do some hidden code 
    } 
} 

public class Client { 
    public static void main(String[] args) { 
    Contract api = new ContractImpl(); 
    api.doIt(); 
    } 
} 

通過這種方式,實現從客戶端查看的隱藏點(後面的接口)。

+0

從客戶的角度來看,如果實現在類ContractImpl中實現,那麼實現如何隱藏在接口後面,ContractImpl實現了Contract。 – Esh

+0

通常你通過工廠模式實例化一個實現類,或者通過它的名字加載類:Class.forName()。newInstance()。這樣你就不會看到實現類的任何內容,而是接口。實現類可以用jar來分隔。 – user2795605