Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

재훈재훈

OODP - Strategy Pattern 본문

Computer Engineering/JAVA

OODP - Strategy Pattern

jaehoonx2 2018. 4. 7. 17:36

Strategy Pattern (스트래티지 패턴)

알고리즘 군을 정의하고 각각을 캡슐화하고 교환해서 사용할 수 있도록 만든다.

스트래티지를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다.

 

어떤 객체를 만들 때 객체가 가지는 기능들이 다양하게 존재할 것이다.

이러한 기능들을 추상화(부품화)하여 언제든지 적용할 수 있게 구조를 만드는 것이 Strategy 패턴이다.

부품화된 기능들은 서로 교체가 가능하다

예를 들어서 자동차에 들어가는 기어 모델이 3개가 있으면 옵션에 따라 기어 교체가 가능하다.

 

예제로봇 제조 프로그램

 

시나리오

1.로봇 모양은 팔다리머리몸통으로 이루어져 있습니다.

2.모든 로봇은 기본적으로 걷고달릴 수 있어야 합니다.

3.Super로봇은 날수 있고미사일을 쏠 수 있으며레이저 검을 가지고 있습니다.

4.Standard 로봇은 날수는 없지만 미사일을 쏠 수 있습니다그리고 레이저 검은 없지만목검은 가지고 있습니다.

5.Low 로봇은 날수도 없고미사일을 쏠 수도 없습니다그리고 레이저검 또는 목검도 없습니다.

 

Robot Src.zip

 


살펴볼 코드

Robot - StandardRobot

FireAction(interface) - FireNo or FireYes

 

 

public abstract class Robot {                                // Robot 추상클래스

          

           public FireAction fireAction;                       // FireAction 인터페이스 타입 변수 fireAction을 선언

  ......         

  

 public Robot() {} 

          

  ......

 

           public abstract void shape();

          

           public void actionFire() {                            // fireAction.fire() - 부품화할 대상추후에 편리하게 교체 가능

fireAction.fire();

  }

          

......

           }

 

 

public class StandardRobot extends Robot {            // Robot 추상클래스를 상속받은 StandardRobot 클래스

 

           public StandardRobot() {

                      fireAction = new FireOk();                  // fireAction FireOk를 지정해줌

      // FireOk FireAction 인터페이스를 구현한 하위클래스 (다형성!!)

//fireAction = new FireNo();    - FireNo()를 해줄 수도 있다이것이 바로 부품화!

 

     ......

           }

 

  ......

 

           public void shape() {                                   // 추상메서드를 구현

                      System.out.println("다리머리몸통으로 이루어져 있다걷고달릴 수 있다.");

           }

}

 

 

public interface FireAction {                                                        // FireAction 인터페이스

           public void fire();

}

 

public class FireNo implements FireAction {                                    // FireNo 클래스 (FireAction을 구현함)

           public void fire() {

                      System.out.println("미사일 발사 기능 없습니다.");

           }

}

 

 

public class FireOk implements FireAction {                            // FireYes 클래스 (FireAction을 구현함)

           public void fire() {

                      System.out.println("미사일 발사");

           }

}

 

----------------------------------------------------------------------------------------------------------------------

 

Main

 

System.out.println("StandardRobot이 주문 들어 왔어요만들어 주세요.");

Robot standardRobot = new StandardRobot();

standardRobot.shape();

standardRobot.actionFire();                    // actionFire가 어떤 객체를 불러오느냐에 따라 결과가 달라짐!

 

 

이런 식으로 코드가 진행된다.

FireAction은 부품화(기능화)되어서 로봇을 만들 때마다 기능을 교체해서 집어넣을 수 있게 된다.

'Computer Engineering > JAVA' 카테고리의 다른 글

Java I/O  (0) 2018.04.07
Java Collections  (0) 2018.04.07
OODP - Singleton Pattern  (0) 2018.04.07
제네릭(Generic)  (0) 2018.04.07
파라미터의 다형성  (0) 2018.04.07