public interface Champion {
void move();
void skillQ();
void skillW();
void skillE();
void skillR();
}
public class KdaAri implements Champion {
@Override
public void move() { System.out.println("KDA 아리 move"); }
@Override
public void skillQ() { System.out.println("KDA 아리 Q"); }
@Override
public void skillW() { System.out.println("KDA 아리 W"); }
@Override
public void skillE() { System.out.println("KDA 아리 E"); }
@Override
public void skillR() { System.out.println("KDA 아리 R"); }
}
public class HanbokAri implements Champion {
@Override
public void move() { System.out.println("한복 아리 move"); }
@Override
public void skillQ() { System.out.println("한복 아리 Q"); }
@Override
public void skillW() { System.out.println("한복 아리 W"); }
@Override
public void skillE() { System.out.println("한복 아리 E"); }
@Override
public void skillR() { System.out.println("한복 아리 R"); }
}
Champion과 Skin의 개념을 분리한다.
public interface Skin {
String getName();
}
public interface Champion extends Skin {
void move();
void skillQ();
void skillW();
void skillE();
void skillR();
}
분리한 Champion 인터페이스를 추상 메서드가 구현한다. 이때, 추상 클래스에서 분리한 구체 인터페이스를 가진다.
public class DefaultChampion implements Champion {
private Skin skin; //인터페이스를 가진다.
private String name;
public DefaultChampion(Skin skin, String name) {
this.skin = skin;
this.name = name;
}
@Override
public void move() {
System.out.println("%s %s move\n", skin.getName(), this.name);
}
@Override
public void skillQ() {
System.out.println("%s %s Q\n", skin.getName(), this.name);
}
@Override
public void skillW() {
System.out.println("%s %s W\n", skin.getName(), this.name);
}
@Override
public void skillE() {
System.out.println("%s %s E\n", skin.getName(), this.name);
}
@Override
public void skillR() {
System.out.println("%s %s R\n", skin.getName(), this.name);
}
@Override
public void getName() {
return skin.getName();
}
}
public class Ari extends DefaultChampion {
public Ari(Skin skin) {
super(skin, "아리");
}
}
public class KDA implements Skin {
@Override
public String getName() {
return "KDA";
}
}
public class App implements Champion {
public static void main(String[] args) {
Champion kdaAri = new Ari(new KDA());
kdaAri.skillQ();
kdaAri.skillW();
Champion hanbokAri = new Ari(new Hanbok());
hanbokAri.skillR();
hanbokAri.skillE();
}
}