Skip to content

Instantly share code, notes, and snippets.

@miensol
Last active August 29, 2015 14:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save miensol/363cc59fc5c3b8373a47 to your computer and use it in GitHub Desktop.
Save miensol/363cc59fc5c3b8373a47 to your computer and use it in GitHub Desktop.
interface UserReference {
void dispatchBehavior(@NonNull UserBehavior behavior);
}
class AnonymousUserReference implements UserReference {
@Override
public void dispatchBehavior(@NonNull UserBehavior behavior) {
behavior.onAnonymous(this);
}
}
class RegularUserReference implements UserReference {
private final User _user;
public RegularUserReference(User user) {
_user = user;
}
@Override
public void dispatchBehavior(@NonNull UserBehavior behavior) {
behavior.onRegular(this);
}
}
class PremiumUserReference implements UserReference {
private final User _user;
public PremiumUserReference(User user) {
_user = user;
}
@Override
public void dispatchBehavior(@NonNull UserBehavior behavior) {
behavior.onPremium(this);
}
}
public abstract class UserBehavior {
public void onAnonymous(UserReference user){}
public void onRegular(RegularUserReference user) {}
public void onPremium(RegularUserReference user) {}
public void dispatch(CurrentUserProvider provider){
UserReference userReference = provider.getCurrentUserReference();
userReference.dispatchBehavior(this);
}
}
class MyActivity extends Activity {
@Inject
CurrentUserProvider _userProvider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new UserBehavior(){
void layoutDefault(){
setContentView(R.layout.regular);;
}
@Override
public void onAnonymous(UserReference user) {
layoutDefault();
}
@Override
public void onRegular(RegularUserReference user) {
layoutDefault();
}
@Override
public void onPremium(RegularUserReference user) {
setContentView(R.layout.premium);
}
}.dispatch(_userProvider);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment