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 | 31 |
Tags
- python os
- c3 second
- gcc regex
- python subprocess
- 정규식 문자열 출력
- c3 축 없애기
- c++ 정규식
- InfluxDB
- 정규식 컴파일
- gcc 업데이트
- c3 step graph
- semanage
- python popen
- snmp
- g++ 업데이트
- linux시간으로 변경
- snmp test
- CentOS7
- c3 축 가리기
- 백준
- telegraf
- centos pyhon 설치
- regex_search
- grafana dashboard
- 정규식 활용
- subporcess path
- c3 초
- 1697
- selinux port 등록
- influxdb 설치
Archives
- Today
- Total
리셋 되지 말자
전략 패턴(Strategy Pattern) 본문
책보다 설명이 잘 되어 있어서 링크 남김. https://victorydntmd.tistory.com/292
https://meylady.tistory.com/53?category=795226
전략 패턴
객체들이 할 수 있는 행위 각각에 대해 전략 클래스를 생성하고, 유사한 행위들을 캡슐화 하는 인터페이스를 정의하여,
객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고 전략을 바꿔주기만 함으로써 행위를 유연하게 확장하는 방법을 말합니다.
간단히 말해서 객체가 할 수 있는 행위들 각각을 전략으로 만들어 놓고, 동적으로 행위의 수정이 필요한 경우 전략을 바꾸는 것만으로 행위의 수정이 가능하도록 만든 패턴입니다.
예시 코드
- MovableStrategy.java
package strategyPattern;
public interface MovableStrategy {
public abstract void move();
}
- Moving.java
package strategyPattern;
public class Moving {
private MovableStrategy movableStrategy;
public void move() {
movableStrategy.move();
}
public void setMovableStrategy(MovableStrategy movableStrategy) {
this.movableStrategy = movableStrategy;
}
}
- LoadStratege.java
package strategyPattern;
public class LoadStrategy implements MovableStrategy{
public void move() {
System.out.println("도로로 이동");
}
}
- RailLoadStratege.java
package strategyPattern;
public class RailLoadStrategy implements MovableStrategy{
public void move() {
System.out.println("선로로 이동");
}
}
- Train.java
package strategyPattern;
public class Train extends Moving {
}
- Bus.java
package strategyPattern;
public class Bus extends Moving{
}
- Client.java
package strategyPattern;
public class Client {
public static void main(String[] args) {
Moving train = new Train();
Moving bus = new Bus();
// 기존의 기차와 버스의 이동 방식
// 기차 : 선로, 버스 : 도로
train.setMovableStrategy(new RailLoadStrategy());
bus.setMovableStrategy(new LoadStrategy());
train.move();
bus.move();
// 선로위를 달리는 버스가 개발
bus.setMovableStrategy(new RailLoadStrategy());
bus.move();
}
}
설명
버스, 기차의 move 메서드를 하나로 묶어서 interface로 분리한다. (MovableStrategy)
객체마다 움직이는 방식을 지정할 수 있도록 구성한다. (새로운 객체 type을 추가하여도, 움직이는 방식을 변경할 필요가 없다.)
템플릿 메서드 패턴과 유사
같은 문제의 해결책에 대해 상속을 이용하는 템플릿 메서드 패턴과 객체 주입을 통한 전략 패턴 중에서 선택/적용할 수 있다.
단일 상속만 가능한 자바 언어에서는 상속이라는 제한이 있는 템플릿 메서드 패턴보다는 전략 패턴이 더 많이 활용된다.
- 클라이언트가 전략을 생성해 전략을 실행할 컨텍스트에 주입하는 패턴
- 개방 폐쇄 원칙(OCP)와 의존 역전 원칙(DIP)가 적용됨
'Java(폐지) > 디자인 패턴' 카테고리의 다른 글
전략 패턴(Strategy Pattern) 2 (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