아래는 객체지향 전략에 벗어나는 예제이다.
MyProgram 클래스에서 각각의 버튼을 누르면 상태를 enum으로 바꿔주는데
그 값을 가져와서
SearchButton에서 onClick()함수를 실행시켜라...
전체, 이미지, 뉴스, 지도 버튼이 눌릴때마다
핑크색으로 설정한다.
SearchButton 객체에 onClick()이 실행된다.
새로운 버튼을 추가하면
SearchButton 객체의 분홍색 부분에 또 추가해줘야 한다... 이것은 객체지향 전략에 벗어난다..
전략 패턴
아까와 다르게
SearchButton class 에서 onClick() 내용이 간단하게 변경됨
SearchStrategy 인터페이스 사용한다. SearchStrategy 인터페이스를 받아 각각의 클래스를 만든다.
searchStrategy 변수에 인터페이스가 대입이 된다.
오른쪽에는 클래스와 인터페이스가 있네 SearchStrategy.... class 각각
SearchStrategy 인터페이스를 implement한 각각의 클래스들은 모두 search()메소드를 갖는다.
클래스마다 각각 search() 함수 내용을 다르게 적는다.
new SearchStrategyAll()로 전체 검색 클래스로 초기화 되어 있지만..
setSearchStrategy(인터페이스와 클래스가 있는) 이 setter를 이용해서 <-- setMode어쩌구가 영향을 줌.
언제든 전체 검색 클래스가 아닌 다른 클래스가 가진 검색 메서드로 갈아 끼울 수 있다.
각각의 버튼을 누르면 검색 전략을 각각의 것으로 갈아 끼워 넣는다.
[뉴스] 검색 방식이 변경되면
SearchStratagynews 클래스를 찾아 내용을 수정한다
새로운 버튼을 추가하려면
SearchStratagy를 implements한 새 클래스를 만들어라.
Strategy <전략 패턴>
이처럼 모듈마다 행동을 다르게 해서
독립적이고 상호 교체 가능하게 만든 것이다.
'java > 자바' 카테고리의 다른 글
enum 열거타입 (0) | 2022.01.24 |
---|---|
[java] 추상 클래스 (0) | 2022.01.01 |
[java] 싱글톤 (0) | 2022.01.01 |
[java] interface (0) | 2021.12.30 |
[java] 생성자 (0) | 2021.12.30 |