Strategy Pattern :
특정한 계열의 알고리즘들을 정의하고 각 알고리즘을 캡슐화하며 이 알고리즘들을 해당 계열 안에서 상호 교체가 가능하게 만든다.
최종 부모클래스는 Hero 입니다.
영웅의 직업은 마법사(Wizard), 전사(Warrior), 기사(Knight), 소서리스(Sorceress) 입니다.
공격(Attack) 기능을 구현하고 싶은데 직업마다 공격법이 달랐으면 합니다.
마법사 - fireMagicAttack
전사 - punchAttack
기사 - swordAttack
소서리스 - iceMagicAttack
영웅들은 객체마을에서 단순히 attack()을 하면 각자 직업에 맞는 공격을 구현하고 싶습니다.
package org.example;
interface AttackBehavior{
void Attack();
}
class FireMagicAttack implements AttackBehavior{
@Override
public void Attack() {
System.out.println("fireMagicAttack!");
}
}
class PunchAttack implements AttackBehavior{
@Override
public void Attack() {
System.out.println("punchAttack!");
}
}
class SwordAttack implements AttackBehavior{
@Override
public void Attack() {
System.out.println("swordAttack!");
}
}
class IceMagicAttack implements AttackBehavior{
@Override
public void Attack() {
System.out.println("iceMagicAttack");
}
}
class Hero{
AttackBehavior attackBehavior;
}
class Wizard extends Hero implements AttackBehavior{
Wizard(){
attackBehavior=new FireMagicAttack();
}
@Override
public void Attack() {
attackBehavior.Attack();
}
}
class Warrior extends Hero implements AttackBehavior{
Warrior(){
attackBehavior=new PunchAttack();
}
@Override
public void Attack() {
attackBehavior.Attack();
}
}
class Knight extends Hero implements AttackBehavior{
Knight(){
attackBehavior=new SwordAttack();
}
@Override
public void Attack() {
attackBehavior.Attack();
}
}
class Sorceress extends Hero implements AttackBehavior{
Sorceress(){
attackBehavior=new IceMagicAttack();
}
@Override
public void Attack() {
attackBehavior.Attack();
}
}
public class main {
public static void main(String[] args) {
Wizard wizard=new Wizard();
Sorceress sorceress=new Sorceress();
Knight knight=new Knight();
Warrior warrior=new Warrior();
wizard.Attack();
sorceress.Attack();
knight.Attack();
warrior.Attack();
}
}
=====================================================================
위 코드에서는 공격명령을 캡슐화 하여 객체의 종류에 따라 Attack() 을 실행하였을 때 다른 공격이 실행된다.
'Java' 카테고리의 다른 글
[Java]_JAVA로 디자인패턴 공부_Factory method Pattern (0) | 2021.07.15 |
---|---|
[Java]_JAVA로 디자인패턴 공부_Decorator Patter (0) | 2021.07.15 |
[Java]_JAVA로 디자인패턴 공부_Observer Pattern (0) | 2021.07.14 |
[Java]_JAVA로 디자인패턴 공부 (0) | 2021.07.14 |
[Java]_#1 (0) | 2021.07.05 |