Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- gcc regex
- c3 step graph
- g++ 업데이트
- python subprocess
- c3 축 없애기
- regex_search
- 정규식 활용
- snmp
- c3 축 가리기
- 1697
- telegraf
- gcc 업데이트
- 정규식 컴파일
- semanage
- snmp test
- c3 second
- subporcess path
- selinux port 등록
- influxdb 설치
- CentOS7
- centos pyhon 설치
- linux시간으로 변경
- grafana dashboard
- 정규식 문자열 출력
- c++ 정규식
- python popen
- python os
- InfluxDB
- c3 초
- 백준
Archives
- Today
- Total
리셋 되지 말자
전략 패턴(Strategy Pattern) 2 본문
전략 패턴의 구성요소
- 전략 메서드를 가진 전략 객체
- 전략 객체를 사용하는 컨텍스트(전략 객체의 사용자/소비자)
- 전략 객체를 생성해 컨텍스트에 주입하는 클라이언트(제3자, 전략 객체의 공급자)
클라이언트는 다양한 전략 중 하나를 선택해 생성한 후 컨텍스트에 주입한다.
예시 - 군인
군인과 군인 사용할 무기와 군인을 지휘하는 장교가 있다고 가정한다. 여기서는 군인이 컨텍스트, 무기가 전략 객체, 장교가 클라이언트다. 이를 코드로 나타내면 아래와 같다.
- Strategy.java
package strategyPattern2;
public interface Strategy {
public abstract void runStrategy();
}
- StrategyGun.java
package strategyPattern2;
public class StrategyGun implements Strategy{
public void runStrategy() {
System.out.println("탕탕탕");
}
}
- StrategySword.java
package strategyPattern2;
public class StrategySword implements Strategy{
public void runStrategy() {
System.out.println("챙챙챙");
}
}
- StrategyBow.java
package strategyPattern2;
public class StrategyBow implements Strategy{
public void runStrategy() {
System.out.println("슈우우우웅");
}
}
- Soldier.java
package strategyPattern2;
public class Soldier {
void runContext(Strategy strategy) {
System.out.println("전투 시작");
strategy.runStrategy();
System.out.println("전투 종료");
}
}
- Client.java
package strategyPattern2;
public class Client {
public static void main(String[] args) {
Strategy strategy = null;
Soldier rambo = new Soldier();
//총을 람보에게 주어 전투를 수행
strategy = new StrategyGun();
rambo.runContext(strategy);
System.out.println();
//검을 람보에게 주어 전투를 수행
strategy = new StrategySword();
rambo.runContext(strategy);
System.out.println();
//활을 람보에게 주어 전투를 수행
strategy = new StrategyBow();
rambo.runContext(strategy);
System.out.println();
}
}
- 실행 결과
전투 시작
탕탕탕
전투 종료
전투 시작
챙챙챙
전투 종료
전투 시작
슈우우우웅
전투 종료
위처럼 전략 객체를 다양하게 변경해가면서 컨텍스트를 실행할 수 있다.
템플릿 메서드 패턴과 유사하다.
같은 문제의 해결책으로 상속을 이용하는 템플릿 메서드 패턴과 객체 주입을 이용하는 전략 패턴 중에서 선택/적용할 수 있다.
단일 상속만이 가능한 자바 언어에서는 상속이라는 제한이 있는 템플릿 메서드 패턴보다는 전략 패턴이 더 많이 활용된다.
- 클라이언트가 전략을 생성해 전략을 실행할 컨텍스트에 주입하는 패턴
- 개방 폐쇄 원칙(OCP)와 의존 역전 원칙(DIP)이 적용됨
'Java(폐지) > 디자인 패턴' 카테고리의 다른 글
전략 패턴(Strategy Pattern) (0) | 2020.08.05 |
---|---|
팩토리 메서드 패턴(Factory Method Pattern) (0) | 2020.08.05 |
템플릿 메서드 패턴(Template Method Pattern) (0) | 2020.08.04 |
싱글톤 패턴(Singleton Pattern) (0) | 2020.08.04 |
데코레이터 패턴(Decorator Pattern) (0) | 2020.08.04 |
Comments