일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 전기차
- AWS
- lambda
- 전기차충전기
- 전기차충전
- 에버온
- 파이썬
- homeassistant
- thread
- Android
- OCPP
- 완속충전기
- everon
- YMODEM
- 디자인패턴
- STM32
- raspberry
- 안드로이드
- 서버리스
- 충전기
- 플라스크
- IOT Core
- flask
- 보안
- 급속충전기
- 홈어시스턴트
- 펌웨어
- 라즈베리파이
- esp8266
- dynamodb
Archives
- Today
- Total
Louie NRT Story
[디자인패턴] 전략(Strategy) 본문
반응형
작성일: 22년 5월 22일
Index
1. 배경
2. Before - SearchButton 코드, Enum Mode 코드
3. Before - MyProgram 코드
4. Before - 코드의 문제점
5. After - Strategy 코드
6. After - SearchButton 코드
7. After - MyProgram 코드
8. After의 장점
1. 배경
- 전체, 이미지, 뉴스, 지도 탭을 선택하는 것에 따라 검색이 다르게 됨
2. Before - SearchButton 코드, Enum Mode 코드
public enum Mode {
ALL, IMAGE, NEWS, MAP
}
public class SearchButton {
private MyProgram myProgram;
public SearchButton (MyProgram _myProgram){
myProgram = _myProgram;
}
public void onClick() {
switch(myProgram.mode){
case ALL:
System.out.println("SearchButton() -> Search ALL");
case IMAGE:
System.out.println("SearchButton() -> Search IMAGE");
break;
case NEWS:
System.out.println("SearchButton() -> Search NEWS");
break;
case MAP:
System.out.println("SearchButton() -> Search MAP");
break;
}
}
}
3. Before - MyProgram 코드
- searchButton의 onClick() 함수를 통하여 검색버튼을 누를 때 Mode의 값에 따라 동작이 달라짐
public class MyProgram {
private SearchButton searchButton = new SearchButton(this);
public Mode mode = Mode.ALL;
public void setModeAll() { mode = Mode.ALL; }
public void setModeImage() { mode = Mode.IMAGE; }
public void setModeNews() { mode = Mode.NEWS; }
public void setModeMap() { mode = Mode.MAP; }
}
4. Before - 코드의 문제점
- Mode가 ALL, Image, News, Map 외에 늘어나게 되면 onClick() 함수와 setMode 함수를 추가해야함
//========================================================================
5. After - Strategy 코드
- Interface를 통하여 상속을 하고 해당 Class에서 search()가 실행 하도록 하
interface SearchStrategy {
public void search();
}
class SearchStrategyAll implements SearchStrategy {
public void search(){
System.out.println("SEARCH ALL");
}
}
class SearchStrstegyImage implements SearchStrategy {
public void search() {
System.out.println("SEARCH IMAGE");
}
}
class SearchStrategyNews implements SearchStrategy {
public void search() {
System.out.println("SEARCH NEWS");
}
}
class SearchStrategyMap implements SearchStrategy {
public void search() {
System.out.println("SEARCH MAP");
}
}
6. After - SearchButton 코드
public class SearchButton {
private MyProgram myProgram;
public SearchButton(MyProgram _myProgram){
myProgram = _myProgram;
}
private SearchStrategy searchStrategy = new SearchStrategyAll();
public void setSearchStrategy(SearchStrategy _searchStrategy) {
searchStrategy = _searchStrategy;
}
public void onClick(){
searchStrategy.search();
}
}
7. After - MyProgram 코드
public class MyProgram {
private SearchButton searchButton = new SearchButton(this);
public void setModeAll(){
searchButton.setSearchStrategy(new SearchStrategyAll());
}
public void setModeImage() {
searchButton.setSearchStrategy(new SearchStrstegyImage());
}
public void setModeNews() {
searchButton.setSearchStrategy(new SearchStrategyNews());
}
public void setModeMap(){
searchButton.setSearchStrategy(new SearchStrategyMap());
}
public void testProgram(){
searchButton.onClick();
setModeImage();
searchButton.onClick();
setModeNews();
searchButton.onClick();
setModeMap();
searchButton.onClick();
}
}
8. After의 장점
- 검색 방법이 변경 될때마다 새로운 Strategy를 갈아 끼우면 됨
- 검색 방법이 추가 될때도 Strategy만 추가하면 되므로 확장성이 용이함
- 옵션들 마다의 행동을 모듈화하여 독립적이고 상호 교체 가능하도록 하는 것임
Referece:
https://www.youtube.com/watch?v=lJES5TQTTWE&t=564s
반응형
'전기차충전기' 카테고리의 다른 글
[디자인패턴] 상태(State) (0) | 2022.05.25 |
---|---|
[전기차충전기] Simplemint 사용법(그리드위즈) (2) | 2022.05.25 |
[디자인패턴] 싱글톤(Singleton) (0) | 2022.05.22 |
[전기차충전기] DC충전 - 파워모듈 제어(UR100030-SW) (0) | 2022.05.22 |
[에너지교육] 전기차와 충전설비 기술 - 03 (0) | 2022.05.05 |
Comments