2016-09-18 77 views
0

我是新來的Java接口,即使我理解這個概念,各地紛紛看到了很多例子,知道它優於繼承在某些情況下,因爲它給你更多的靈活性和較小的依賴性。接口的概念

在實踐中,我一直在建設的Android基於位置的應用程序的第一次。我覺得我應該設計一些接口,以便將來可以放鬆我的工作,因爲我假設我可能會再次構建其他基於位置的應用程序。

所以我一直在試圖建立這個接口的地圖。目前,我一直在使用Mapbox平臺而不是Google Maps。我認爲在未來我想要使用Google Maps API的情況下構建界面是個不錯的主意。

所以我做了這樣的事情:

public interface Mapable { 

    // Marker 
    Object createMarker(String id, Location location, int icon); 
    void addMarker(Object object); 
    void removeMarker(String id); 
    void moveMarker(String id, Location destination); 

    // Camera 
    Object createCamera(); 
    void addCamera(Object object); 
    void changeZoom(int zoom); 
    void setZoomRange(int min, int max); 
    void moveCamera(Location location, int zoom); 

    void updateElements(); 
} 

所以,我認爲這並不重要我想利用這個平臺,我可以利用這個接口就知道我必須在地圖實現哪些方法類。

但是,它感覺像缺少某些東西,其設計或目的不正確。 這是使用接口的正確方法嗎?

回答

1

這是使用接口的正確方法是什麼?

是的!如果你像這樣使用接口,接口肯定可以提供更多的靈活性。

感覺就像缺少某些東西,其設計或目的不正確。

也許你應該創建一個名爲IMarker的界面和接口稱爲ICamera而是採用Object作爲標記和相機?

public interface IMarker { 
    String getID(); 
    Location getLocation(); 
    @DrawableRes 
    int getIcon(); // You can also return a Drawable instead, if you want 

    // here you can add setters, but I don't think you need to 
} 

public interface ICamera { 
    int getZoom(); 
    int getMinZoom(); 
    int getMaxZoom(); 
    Location getLocation(); 

    void setZoom(int value); 
    void setZoomRange(int min, int max); 
    void move(Location location, int zoom); 
} 

然後,你可以寫你的Mappable界面是這樣的:

public interface Mapable { 

    // Marker 
    IMarker createMarker(String id, Location location, int icon); 
    void addMarker(IMarker marker); 
    void removeMarker(String id); 
    void moveMarker(String id, Location destination); 

    // Camera 
    ICamera createCamera(); 
    void addCamera(ICamera camera); 
    // Uncomment this line below if you want to be able to get all cameras 
    // ICamera[] getCameras(); 
    // Uncomment this line below if you want to be able to get the current camera 
    // ICamera getCurrentCamera(); 

    void updateElements(); 
} 
+0

這是工作,謝謝 – AndroidDev