728x90
    
    
  반응형
    
    
    
  
01.패턴적용 - 생성자에 넣기
01.1 BlueLightRedLight
public class BlueLightRedLight{
    
    private Speed speed;
    public BlueLightRedLight(Speed speed){
        this.speed = speed;
    }
    
    public void blueLight(){
        speed.blueLight();
	}
    
    public void redLight(){
        speed.redLight();
	}
}
- context로 남아있어야함
 
01.2 Speed
public interface Speed{
    public void blueLight();
    public void redLight();
}
- 전략
 
01.3 Normal
publci class Normal implements Speed{
    @Override
    public void blueLight(){
        System.out.println("무 궁 화    꽃    이");
	}
    
    @Override
    public void redLight(){
        System.out.println("피 었 습 니  다.");
    }
}
01.4 Faster
publci class Faster implements Speed{
    @Override
    public void blueLight(){
         	System.out.println("무궁화꽃이");
	}
    
    @Override
    public void redLight(){
        	System.out.println("피었습니다.");
    }
}
01.5 Client
public class Client{
    
    public static void main(String[] args){
		BlueLightRedLight game = new BlueLightRedLight(new Normal());
        game.blueLight();
        game.redLight();
    }
}
02.패턴적용 - operater에 넣기
02.1 BlueLightRedLight
public class BlueLightRedLight{
       
    public void blueLight(Speed speed){
        speed.blueLight();
	}
    
    public void redLight(Speed speed){
        speed.redLight();
	}
}
- context로 남아있어야함
 
02.2 Speed
public interface Speed{
    public void blueLight();
    public void redLight();
}
- 전략
 
02.3 Normal
publci class Normal implements Speed{
    @Override
    public void blueLight(){
        System.out.println("무 궁 화    꽃    이");
	}
    
    @Override
    public void redLight(){
        System.out.println("피 었 습 니  다.");
    }
}
02.4 Faster
publci class Faster implements Speed{
    @Override
    public void blueLight(){
         	System.out.println("무궁화꽃이");
	}
    
    @Override
    public void redLight(){
        	System.out.println("피었습니다.");
    }
}
02.5 Client
public class Client{
    
    public static void main(String[] args){
		BlueLightRedLight game = new BlueLightRedLight();
        game.blueLight(new Normal());
        game.redLight(new Faster());
    }
}
- 이렇게 하면 전략을 선택 할 수 있음
 
3.전략 패턴을 적용하면 좋은것
- 만약에 Fastest를 추가하는 상황이면 기존을 코드를 건들지 않음
 
publci class Fastest implements Speed{
    @Override
    public void blueLight(){
         	System.out.println("무광꼬치");
	}
    
    @Override
    public void redLight(){
         	System.out.println("폈슴돠");
    }
}
- 전략을 추구하더라도 BlueLightRedLight는 바꾸지 않아도 동작함
- open closed principle가 적용되는 것
 
 
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");
            }
        });
    }
}
- 위와 같이 익명 내부 클래스를 사용해서 직접 클래스 만들지 않고
- 메소드를 출력하는 순간에 원하는 전략을 구현해서 넣을 수 있음
 - 자바에 있는Comparator에서 많이 씀
- Collections.sort(null, new Comparator<object>(){});
 
 
 
GitHub - 3DPIT/study
Contribute to 3DPIT/study development by creating an account on GitHub.
github.com
728x90
    
    
  반응형
    
    
    
  'CS Study > 디자인패턴' 카테고리의 다른 글
| 22.02.20_자바와스프링에서찾아보는패턴 (0) | 2022.02.21 | 
|---|---|
| 22.02.20_전략패턴의장점과단점 (0) | 2022.02.21 | 
| 22.02.20_전략패턴-패턴소개 (0) | 2022.02.20 | 
| 2021.12.11_테코레이터패턴04.자바와스프링에서찾아보는패턴 (0) | 2021.12.11 | 
| 2021.12.11_데코레이터패턴03.장점과단점 (0) | 2021.12.11 | 
										
									
댓글