행동 패턴: 전략 패턴

xellos·2022년 4월 10일
0

디자인 패턴

목록 보기
14/20

소개

여러 알고리즘을 캡슐화하고 상호 교환 가능하게 만드는 패턴이다.

  • 컨텍스트에서 사용할 알고리즘을 클라이언트가 선택한다.

1) 장점

  1. 새로운 전략을 추가해도 기존 코드를 변경하지 않는다.
  2. 상속대신 위임을 사용할 수 있다.
  3. 런타임에 전략을 변경할 수 있다.

2) 단점

  1. 복잡도가 증가한다.
  2. 클라이언트 코드가 구체적인 전략을 알아야 한다.

구현

1) 새로운 전략에 대한 인터페이스 구현

public interface Speed {
	void blueLight();
    void redLight();
}

2) 인터페이스를 구현하는 전략 구현

Fater

public class Faster implements Speed {

	@Override
    public void bluePrint() {
    	System.out.println("무궁화 꽃이");
    }
    
    @Override
    public void redPrint() {
    	System.out.println("피었습니다.");
    }
}

Fastest

public class Fastest implements Speed {
	
    @Override
    public void blueLight() {
    	System.out.println("무관꼬치");
    }
    
    @Override
   	public void redLight() {
    	System.out.println("피어씀미다.");
    }
}

Normal

public class Normal implements Speed {
	
    @Override
    public void blueLight() {
    	System.out.println("무   궁   화 꼬   오 옷 이");
    }
    
    @Override
    public void redLight() {
    	System.out.println("피    어   었    씀   미 다");
    }
}

3) 전략을 사용하는 클래스 구현

public class BlueLightRedLight {

	public void blueLight(Speed speed) {
    	speed.blueLight();
    }
    
    public void redLight(Speed speed) {
    	speed.redLight();
    }
}

사용

public class Client {
	public static void main(String[] args) {
    	BlueLightRedLight game = new BlueLightRedLight();
        game.blueLight(new Normal());
        game.redLight(new Fastest();
        game.blueLight(new Speed() {
        	@Override
            public void blueLight() {
            	System.out.println("blue light");
            }
        
        	@Override
            public void redLight() {
            	System.out.println("red light");
            }
        });
    }
}

0개의 댓글