繁体   English   中英

空实现抽象方法是一个好方法吗?

[英]Is empty implementation of abstract methods a good approach?

我正在为我的Android应用程序使用两种不同的Google Analytics服务(Google Analytics和Mixpanel)。

我创建了一个抽象基类,如下所示:

public abstract class AnalyticsService {

    public abstract void trackAppOpen();
    public abstract void identifyUserOnLogin();

}

然后我创建了从AnalyticsService基类扩展的具体子类。

public class MPAnalytics extends AnalyticsService {
    @Override
    public void trackAppOpen() {
        //Send event to MixPanel
    }
    @Override
    public void identifyUserOnLogin() {
        //Identify user with MixPanel
    }
}

public class GoogleAnalytics extends AnalyticsService {
    @Override
    public void trackAppOpen() {
        //Send event to Google
    }
    @Override
    public void identifyUserOnLogin() {
        //Do nothing
    }
}

现在,Google Analytics实际上并不支持用户识别,因此我必须创建registerUserOnLogin()方法的空实现。

我觉得这可能不是正确的方法,因为用户识别不是Google Analytics的行为,因此理想情况下它不应该是基础AnalyticsService类的一部分,而应该在MPAnalytics类中定义。

但是这种方法的问题在于客户端,我希望能够通过使用基本的AnalyticsService类来引用所有不同的分析服务,而不用担心具体的实现。

List<AnalyticsService> analyticsServices;
for (AnalyticsService service : analyticsServices) {
    service.trackAppOpen();
    service.identifyUserOnLogin(); // where should this method be?
}

有一个更好的方法吗? 谢谢。

如果你可以使用界面,那就去做吧。
为什么 - >以防你以后继续继承母班。
不要忘记你只能继承一次

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM