본문 바로가기

객체지향

[디자인패턴]StrategyPattern

반응형

https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4 

 

[무료] 자바 디자인 패턴의 이해 - Gof Design Pattern - 인프런 | 강의

자바 디자인 패턴 이해하기 강좌 입니다. 여러가지 디자인 패턴들을 알아보며 디자인 패턴에 대한 이해도를 높이도록 도와줍니다. Gof Design Pattern을 자바 언어로 설명한 강의. 의미 있고 쉬운 예

www.inflearn.com

[기본]

1.인터페이스

=>기능부와 구현부를 분리할수 있도록 제공

 =>어떠한 기능을 호출할수 있도록 제공

2.델리게이트

=>특정객체에 기능을 사용하기 위해 다른객체의 기능을 호출하여 

   책임을 위임할수 있다.

 

public class AObj {
    AInterfacee aInterfacee;

    public AObj(){
        aInterfacee=new AinterfaceImpl();
    }
    //다른객체에 기능을 떠넘기다 :델리게이트
    public void funcAA(){
        aInterfacee.funcA();
        aInterfacee.funcA();

    }
}
public class Main {
    public static void main(String[] args){
        /*
        AInterfacee aInterfacee= new AinterfaceImpl();
        aInterfacee.funcA(); //기능에 대해 통로준비.
         */
        AObj aObj=new AObj();
        aObj.funcAA();
    }
}
public class AinterfaceImpl implements AInterfacee {

    @Override
    public void funcA() {
        System.out.println("AAA");
    }
}

 

[전략패턴의 개념]

여러가지 알고리즘을 하나의 추상적인 접근(=인터페이스)을 만들어 접근접에서 서로 교환가능하도록 하는패턴

 

[실습]

게임캐릭터가 무기라는 전략을 가지고있고 그 무기를 통해서 공격을 들어가면, 그공격이 어떤 공격이냐에 따라 호출되는게 다르게 된다.

 

public class main {
    public static void main(String[] args) {
        GameCharacter character = new GameCharacter();
        character.attack();
        character.setWeapon(new Knife());
        character.attack();
        character.setWeapon(new Sword());
        character.attack();
    }
}
//교환 가능한 무기
public interface Weapon {
    public void attack();
}
public class Sword implements Weapon  {
    @Override
    public void attack() {
        System.out.println("돌공격");
    }
}
public class Knife implements Weapon {
    @Override
    public void attack() {
        System.out.println("칼공격");
    }
}
public class GameCharacter {

    Weapon weapon;//접근점 생성

    //교환 가능
    public void setWeapon(Weapon weapon){
        this.weapon=weapon;
    }
    public void attack(){
        //델리게이트: weapon이 알아서 할꺼임. 특정객체의 기능이 다른객체의기능을 이용하는 기능
        if(weapon==null){
            System.out.println("맨손공격");
        }
        else {
            weapon.attack();
        }
    }
}

 

맨손공격
칼공격
돌공격

반응형

'객체지향' 카테고리의 다른 글

[디자인패턴]Template Method Pattern  (0) 2022.03.27
[디자인 패턴]AdapterPattern  (0) 2022.03.27
Exception  (0) 2021.06.01
추상화와 인터페이스  (0) 2018.08.23
객체지향 알아 둘 것  (0) 2018.03.27