您可以使用软件约定/原则,例如
"dependency inversion principle"
"ports and adapters"
你的模型层应该不了解Android如果你能避免它才是重点。
试试这样的:
型号:
private final SocialLoginProvider socialLoginProvider;
public MyModel(SocialLoginProvider socialLoginProvider) {
this.socialLoginProvider = socialLoginProvider;
}
public void authWithLinkedin(final IAuth listener) {
socialLoginProvider.init(buildScope(), new SocialLoginProvider.Listener() {
@Override
public void onAuthSuccess() {
listener.onSuccess();
}
@Override
public void onAuthError() {
listener.onError();
}
}, true);
}
工厂:
public MyModel getModel(Context context) {
LISessionManager li = LISessionManager.getInstance(context);
SocialLoginProvider provider = new LinkedInSocialLoginProvider(context, li);
return new MyModel(provider);
}
界面:
public interface SocialLoginProvider {
void init(Scope scope, Listener listener);
interface Listener {
void onAuthSuccess();
void onAuthError();
}
}
SocialLoginProvider 的适配器:
public class LinkedInSocialLoginProvider implements SocialLoginProvider {
private final Context context;
private final LISessionManager linkedInSessionManager;
public LinkedInSocialLoginProvider(Context context, LISessionManager linkedInSessionManager) {
this.context = context;
this.linkedInSessionManager = linkedInSessionManager;
}
@Override
public void init(Scope scope, Listener listener) {
linkedInSessionManager.init(context, scope,
new AuthListener() {
@Override
public void onAuthSuccess() {
listener.onSuccess();
}
@Override
public void onAuthError(LIAuthError error) {
listener.onError();
}
}, true);
}
}