관리 메뉴

bread, coffee and coding

Design patterns quiz 본문

Coding test

Design patterns quiz

DongJin lee 2021. 7. 14. 13:12

디자인패턴 중 스트래티지 패턴을 활용하여 롤플레잉 게임의 기능을 만들어 봅시다.

 

최종 부모클래스는 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();



    }
}