bread, coffee and coding
Design patterns quiz 본문
디자인패턴 중 스트래티지 패턴을 활용하여 롤플레잉 게임의 기능을 만들어 봅시다.
최종 부모클래스는 Hero 입니다.
영웅의 직업은 마법사(Wizard), 전사(Warrior), 기사(Knight), 소서리스(Sorceress) 입니다.
공격(Attack) 기능을 구현하고 싶은데 직업마다 공격법이 달랐으면 합니다.
마법사 - fireMagicAttack
전사 - punchAttack
기사 - swordAttack
소서리스 - iceMagicAttack
영웅들은 객체마을에서 단순히 attack()을 하면 각자 직업에 맞는 공격을 구현하고 싶습니다.
만들어 주세요.
package org.example;
interface AttackBehavior{
public void attack();
}
class FireMagicAttack implements AttackBehavior{
@Override
public void attack() {
System.out.println("파이어 매직 어택~!");
}
}
class PunchAttack implements AttackBehavior{
@Override
public void attack() {
System.out.println("펀치 어택~!");
}
}
class SwordAttack implements AttackBehavior{
@Override
public void attack() {
System.out.println("스워드 어택~!");
}
}
class IceMagicAttack implements AttackBehavior{
@Override
public void attack() {
System.out.println("아이스 매직 어택~!");
}
}
class Hero{
AttackBehavior attackBehavior;
}
class Wizard extends Hero{
Wizard(){
attackBehavior = new FireMagicAttack();
}
}
class Warrior extends Hero{
Warrior(){
attackBehavior = new PunchAttack();
}
}
class Knight extends Hero{
Knight(){
attackBehavior = new SwordAttack();
}
}
class Sorceress extends Hero{
Sorceress(){
attackBehavior = new IceMagicAttack();
}
}
public class Main {
public static void main(String[] args) {
Wizard beopsa = new Wizard();
Warrior jeonsa = new Warrior();
Knight gisa = new Knight();
Sorceress lee = new Sorceress();
beopsa.attackBehavior.attack();
jeonsa.attackBehavior.attack();
gisa.attackBehavior.attack();
lee.attackBehavior.attack();
}
}'Coding test' 카테고리의 다른 글
| FileInputStream과 FileOutputStream(Java) (0) | 2021.07.07 |
|---|---|
| [Java] 성적을 배열에 넣고 총합과 평균을 출력해 봅시다 (0) | 2021.07.06 |
| 프로그래머스 1단계 짝수와 홀수(C#) (0) | 2021.07.05 |
| 프로그래머스 1단계 평균 구하기(C#) (0) | 2021.07.05 |
| 프로그래머스 1단계 직사각형 별찍기(C#) (0) | 2021.07.05 |