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>(){});
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 |
댓글