public class Level {
// 정적 팩토리 메소드
public static Level of(int score){ // 메서드 바꾸지 않고
if (score < 50){
return new Basic(); // 구현체만 바꾸면 된다. (OCP 위반?)
} else if (score < 80){
return new Intermediate();
} else {
return new Advanced();
}
}
// 어리석은 코드
Level basic = new Basic();
Level intermediate = new Intermediate();
Level advanced = new Advanced();
}
public class Basic extends Level {
}
public class Intermediate extends Level {
}
public class Advanced extends Level {
}