Created
November 17, 2017 10:51
-
-
Save code-twister/1296dec29c31c1a30e5c0a52bb2cd6d5 to your computer and use it in GitHub Desktop.
Experiment trying to create a builder pattern which enforces certain params and others being optional, that's also inheritable.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class Activity1$$IntentBuilder<NEXT> { | |
protected Map<String, String> params = new HashMap<>(); | |
public Activity1FirstParam createActivity1() { | |
return new Activity1FirstParam(); | |
} | |
protected class Activity1FirstParam { | |
public AfterExtra1 extra1(String extra1) { | |
params.put("extra1", extra1); | |
return new AfterExtra1(); | |
} | |
} | |
public class AfterExtra1 { | |
public NEXT extra2(String extra2) { | |
params.put("extra2", extra2); | |
return createAllSet(); | |
} | |
} | |
public NEXT createAllSet() { | |
return (NEXT) new Activity1AllSet(); | |
} | |
public class Activity1AllSet { | |
public Activity1AllSet optional1(String optional1) { | |
params.put("optional1", optional1); | |
return this; | |
} | |
public Map<String, String> build() { | |
return params; | |
} | |
} | |
} | |
public class Activity2$$IntentBuilder<NEXT> extends Activity1$$IntentBuilder<NEXT> { | |
public Activity2FirstParam createActivity2() { | |
return new Activity2FirstParam(); | |
} | |
public class Activity2FirstParam { | |
public AfterExtra3 extra3(String extra3) { | |
params.put("extra3", extra3); | |
return new AfterExtra3(); | |
} | |
} | |
public class AfterExtra3 { | |
public Activity1FirstParam extra4(String extra4) { | |
params.put("extra4", extra4); | |
return new Activity1FirstParam(); | |
} | |
} | |
@Override | |
public NEXT createAllSet() { | |
return (NEXT) new Activity2AllSet(); | |
} | |
public class Activity2AllSet extends Activity1AllSet { | |
public Activity2AllSet optional2(String optional2) { | |
params.put("optional2", optional2); | |
return this; | |
} | |
public Activity2AllSet optional3(String optional3) { | |
params.put("optional3", optional3); | |
return this; | |
} | |
} | |
} | |
public class Client { | |
public static void main(String[] args) { | |
Map<String, String> params1 = new Activity1$$IntentBuilder<Activity1$$IntentBuilder.Activity1AllSet>().createActivity1() | |
.extra1("first") | |
.extra2("second") | |
.optional1("hello") | |
.build(); | |
printMap(params1); | |
Map<String, String> params2 = new Activity2$$IntentBuilder<Activity2$$IntentBuilder.Activity2AllSet>().createActivity2() | |
.extra3("3") | |
.extra4("4") | |
.extra1("1") | |
.extra2("2") | |
.optional3("op3") | |
.build(); | |
System.out.println("#########################"); | |
printMap(params2); | |
} | |
private static void printMap(Map<String, String> params1) { | |
for (String key : params1.keySet()) { | |
System.out.println(key + " : " + params1.get(key)); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment