두번째로 스트레티지 패턴을 알아보자. 스트레티지 패턴은 알고리즘 군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든 것이다. 스트레티지 패턴을 이용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다. 쉽게 말해 어떤 객체가 가지고 있는 기능을 추상화 하여 언제든지 적용할 수 있게 만드는 것이다. 실무에서 많이 사용하는 패턴이다. 내가 짠 코드를 다른 사람이 다시 짤 때 Super클래스를 추상화 시켜 Derived클래스에서 꼭 필요한 함수들을 빼먹지 않고 사용할 수 있게 할 수 있는 방법으로도 사용된다.
package com.Strategy;
public abstract class Robot { //상속 받는 클래스가 꼭 필요한 기능을 빼먹지 않도록 추상화한다.
public Robot() {}
public void RobotWalk() {
System.out.println("걸을 수 있습니다.");
}
public void shape() {
System.out.println("팔 다리 몸통이 있습니다.");
}
public abstract void RobotRun();
public abstract void RobotFly();
public abstract void RobotMissile() ;
public abstract void RobotLaser();
}
package com.Strategy;
public class LowRobot extends Robot {
public LowRobot() {
RobotWalk();
RobotRun();
RobotFly();
RobotMissile();
RobotLaser();
shape();
System.out.println();
}
public void RobotRun() {
System.out.println("뛸 수 없습니다.");
}
public void RobotFly() {
System.out.println("날 수 없습니다.");
}
public void RobotMissile() {
System.out.println("미사일 쏠 수 없습니다.");
}
public void RobotLaser() {
System.out.println("레이저 쏠 수 없습니다.");
}
}
package com.Strategy;
public class StandardRobot extends Robot {
public StandardRobot() {
RobotWalk();
RobotRun();
RobotFly();
RobotMissile();
RobotLaser();
shape();
System.out.println();
}
public void RobotRun() {
System.out.println("뛸 수 있습니다.");
}
public void RobotFly() {
System.out.println("날 수 있습니다.");
}
public void RobotMissile() {
System.out.println("미사일 쏠 수 없습니다.");
}
public void RobotLaser() {
System.out.println("레이저 쏠 수 없습니다.");
}
}
package com.Strategy;
public class SuperRobot extends Robot {
public SuperRobot() {
RobotWalk();
RobotRun();
RobotFly();
RobotMissile();
RobotLaser();
shape();
System.out.println();
}
public void RobotRun() {
System.out.println("뛸 수 있습니다.");
}
public void RobotFly() {
System.out.println("날 수 있습니다.");
}
public void RobotMissile() {
System.out.println("미사일 쏠 수 있습니다.");
}
public void RobotLaser() {
System.out.println("레이저 쏠 수 있습니다.");
}
}
package com.Strategy;
public class Main {
public static void main(String[] args) {
LowRobot LR = new LowRobot();
StandardRobot SR = new StandardRobot();
SuperRobot SupR = new SuperRobot();
}
}
'자바' 카테고리의 다른 글
21. API(String) (0) | 2019.08.05 |
---|---|
20. 패턴을 이용한 객체 지향 이해하기(인터페이스를 활용한 스트레티지) (0) | 2019.08.01 |
18. 패턴을 이용한 객체 지향 이해하기(싱글톤) (0) | 2019.07.30 |
17. 다중 구현 (0) | 2019.07.29 |
16. 핸드폰 예제로 알아보는 인터페이스 (0) | 2019.07.29 |