Skip to content

Instantly share code, notes, and snippets.

@code-twister
Created November 17, 2017 10:51
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 code-twister/1296dec29c31c1a30e5c0a52bb2cd6d5 to your computer and use it in GitHub Desktop.
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.
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