템플릿 메소드 활용 하기
상속개념 , 다형성 개념 과 템플렛메소드 개념도 이해하고 넘어가야 한다.
abstract class 추상 클래스 선언
템플릿 메소드 go()
package TempletEx;
public abstract class PlayerLevel { // 상위클래스
public abstract void run();
public abstract void jump();
public abstract void turn();
public abstract void showLevelMessage();
final public void go(int count) { // 템플릿 메소드 생성 - 이순서대로 실행해야 하기 때문에 final로 선언
run();
for(int i = 0; i < count; i++ ) { // 카운트 만큼 점프 한다.
jump();
}
turn();
}
}
초보자 클래스 BeginnerLevel 클래스
package TempletEx;
public class BeginnerLevel extends PlayerLevel {
@Override
public void run() {
System.out.println("천천히 달립니다.");
}
@Override
public void jump() {
System.out.println("점프를 못하지롱");
}
@Override
public void turn() {
System.out.println("turn 못하지롱");
}
@Override
public void showLevelMessage() {
System.out.println("****** 초급자 레벨 입니다. *****");
}
}
중급자 레벨 AdvancedLevel 클래스
package TempletEx;
public class AdvancedLevel extends PlayerLevel {
@Override
public void run() {
System.out.println("빨리 달립니다.");
}
@Override
public void jump() {
System.out.println("높이 점프합니다.");
}
@Override
public void turn() {
System.out.println("턴 못합니다.");
}
@Override
public void showLevelMessage() {
System.out.println("******중급자 레벨입니다. *******");
}
}
고급자 레벨 SuperLevel 입니다.
package TempletEx;
public class SuperLevel extends PlayerLevel {
@Override
public void run() {
System.out.println("엄청 빠르게 달립니다.");
}
@Override
public void jump() {
System.out.println("아주 높이 점프합니다.");
}
@Override
public void turn() {
System.out.println("turn 합니다.");
}
@Override
public void showLevelMessage() {
System.out.println("*************고급자 입니다.*************");
}
}
Player 레벨에
PlayerLevel 클래스를 선언합니다. 이때 상속받는 클래스들을 level 변수에 대입합니다.
기본생성자에서
level 변수에 초보자클래스를 대입합니다.
upgradeLevel() 메소드를 통해 PlayerLevel 클래스이 level 변수를 매개변수로 가져옵니다.
지금 내 래밸을 가져온 래밸로 지정합니다. this.level = level;
play() 메소드를 통해 count 를 매개변수로 받고
level 은 카운트 점프수만큼 증가합니다.
package TempletEx;
import java.util.Scanner;
public class Player {
private PlayerLevel level; // 이 레벨 변수에 playLevel 에 상속받은 모든애들이 대입될수있다. ( 다형성 의 장점 )
// PlayerLevel 이라는 클래스 타입 사용
public Player() {
level = new BeginnerLevel();
level.showLevelMessage(); // 초보자 레벨입니다.
}
public PlayerLevel getLevel() {
return level;
}
public void upgradeLevel(PlayerLevel level) { // BegineerLevel 로 업그레이드 할수도 있고 Super타입으로도 업그레이드 할수있으니
this.level = level; // 나이 레벨을 업그레이드 레벨로 해준다
}
public void play(int count) {
level.go(count);
}
}
실행 클래스
Player 가 생성되면 초보자 래벨을 부여받습니다.
중급자를 생성하고나서
기존에 만든 Player에다가 upgradeLevel(중급자객체) 를 대입하고
play() 메소드를 실행하면 2번 점프수만큼 2번 출력됩니다.
고급자를 생성하고 나서
기존에 만든 Player 에다가 upgradeLevel(고급자객체) 를 대입하고 나서
play 메소드를 실행하면 점프가 3번 출력됩니다.
package TempletEx;
public class MainBoardPlay {
public static void main(String[] args) {
Player player = new Player();
player.play(1);
AdvancedLevel aLevel = new AdvancedLevel();
aLevel.showLevelMessage();
player.upgradeLevel(aLevel);
player.play(2);
SuperLevel sLevel = new SuperLevel();
sLevel.showLevelMessage();
player.upgradeLevel(sLevel);
player.play(3);
}
}
'JAVA Programming' 카테고리의 다른 글
[48] 인터페이스 요소들 (0) | 2020.07.17 |
---|---|
[45] 인터페이스 스케쥴러 , 다형성 (0) | 2020.07.16 |
[40] 추상클래스를 이용한 템플릿 메소드 , final static 상수 (0) | 2020.07.16 |
[39] 추상 클래스 abstract class , 상속 하위클래스 구현 (0) | 2020.07.16 |
[37] 다운캐스팅 과 instanceof (0) | 2020.07.16 |