我是java接口的新手,即使我理解了这个概念,已经看过很多例子并且知道它在某些情况下优于继承,因为它为你提供了更多的灵活性和更少的依赖。
在实践中,我第一次为Android构建基于位置的应用程序。我觉得我应该设计一些界面,以便将来可以放松我的工作,因为我假设我可能会再次构建其他基于位置的应用程序。
所以我一直在尝试为地图构建这个界面。目前,我一直在使用Mapbox平台而不是谷歌地图。我认为如果我想在将来使用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();
}
所以,我相信我想要使用的平台无关紧要,我可以利用这个界面来了解我必须在Map类中实现哪些方法。
然而,感觉缺少某些东西,其设计或目的不正确。 这是使用接口的正确方法吗?
答案 0 :(得分: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();
}