Skip to content

Instantly share code, notes, and snippets.

@jonasurbano
Created April 3, 2015 23:44
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 jonasurbano/f4f4b1b53e4dcec92be9 to your computer and use it in GitHub Desktop.
Save jonasurbano/f4f4b1b53e4dcec92be9 to your computer and use it in GitHub Desktop.
Example of Pattern Factory with Java EE 7. A recruiter should choose among developers depending on their English level
import javax.enterprise.context.Dependent;
@EnglishLevel(EnglishLevel.Type.Intermediate)
@Dependent
public class Developer implements Person {
@Override
public String readResume() {
return "I could be your man";
}
}
import javax.enterprise.context.Dependent;
@EnglishLevel(EnglishLevel.Type.Advanced)
@Dependent
public class DeveloperWithC1 extends Developer {
@Override
public String readResume() {
return "I'm your man";
}
}
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.inject.Qualifier;
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.TYPE})
public @interface EnglishLevel {
Type value();
enum Type { Intermediate, Advanced, Proficiency};
}
import javax.enterprise.util.AnnotationLiteral;
public class EnglishLevelLiteral extends AnnotationLiteral<EnglishLevel> implements EnglishLevel {
private static final long serialVersionUID = 1L;
private Type type;
public EnglishLevelLiteral(Type type) {
this.type = type;
}
@Override
public Type value() {
return type;
}
}
public interface Person {
public String readResume();
}
import javax.enterprise.inject.Any;
import javax.enterprise.inject.Instance;
import javax.inject.Inject;
public class PersonFactory {
@Inject
@Any
private Instance<Person> developers;
/**
* Search among hundreds of resumes
*/
public Person getDeveloper(EnglishLevel.Type type) {
EnglishLevelLiteral literal = new EnglishLevelLiteral(type);
return developers.select(literal).get();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment