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
- 프로그래머스
- Django REST Android
- C++
- livedata
- flutter firestore
- FLUTTER
- RxAndroid
- C/C++
- Flutter TextField
- C
- 안드로이드
- dart
- Java
- kodility
- NDK
- UWP
- RxJava
- android push
- 코틀린
- Kotlin
- Android P
- Django REST framework
- Android
- android architecture component
- Rxjava2
- 안드로이드 구글맵
- Python
- 알고리즘
- mfc
- Django REST
Archives
- Today
- Total
개발하는 두더지
[디자인패턴] 스트래티지 패턴(strategy pattern) 본문
스트래티지 패턴 (Strategy Pattern)
알고리즘군을 정의하고 각각을 캡슐화하여 교환하여 사용할 수 있도록 만든다.
스트래티지 패턴을 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다.
여러가지 포맷으로 파일을 만드는 어플리케이션을 만든다고 생각해보자.
요구사항은
- A , B 타입의 파일을 생성한다.
- 공통적인 파일의 속성을 출력한다.
- 파일 타입별 정책을 출력한다.
- 파일 생성시 로그를 남긴다.
등이 있다고 하자.
표준적인 객체지향 기법을 사용하여 UserFile 이라는 슈퍼클래스를 만든다음에 그 클래스를 확장하면서 다양한 파일 포맷 파일을 만든다.
파일의 속성을 출력하는 인터페이스 생성
파일 타입마다 다른 속성을 출력시키기 위해서 분리
ex)
타입1은 파일이름, 생성일자 출력
타입2는 파일이름, 생성일자, 소유자, 마지막수정일자 출력
1 2 3 4 | public interface FileProperty { public void print(); } | cs |
1 2 3 4 5 6 7 8 9 10 11 | public class FileProperty1 implements FileProperty { @Override public void print() { // TODO Auto-generated method stub System.out.println("File Property 1"); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 | public class FileProperty2 implements FileProperty { @Override public void print() { // TODO Auto-generated method stub System.out.println("File Property 2"); } } | cs |
추상메소드들은 각각의 파일 포맷 객체에서 구현해준다.
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 | public abstract class UserFile { protected FileProperty m_fileProperty; abstract protected void createFile(); abstract protected void createLog(); abstract protected void setPolicy(); public void printFileProperty() { if(m_fileProperty != null) m_fileProperty.print(); } public void create() { createFile(); setPolicy(); createLog(); } public void setFileProperty(FileProperty FileProperty) { m_fileProperty = FileProperty; } } | cs |
파일타입A
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 | public class FileTypeA extends UserFile { public FileTypeA() { m_fileProperty = new FileProperty1(); } @Override protected void createFile() { // TODO Auto-generated method stub System.out.println("FileTypeA Create"); } @Override protected void createLog() { // TODO Auto-generated method stub System.out.println("FileTypeA Create Success"); } @Override protected void setPolicy() { // TODO Auto-generated method stub System.out.println("FileTypeA Policy"); } } | cs |
파일타입B
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 | public class FileTypeB extends UserFile { public FileTypeB() { m_fileProperty = new FileProperty2(); } @Override protected void createFile() { // TODO Auto-generated method stub System.out.println("FileTypeB Create"); } @Override protected void createLog() { // TODO Auto-generated method stub System.out.println("FileTypeB Create Success"); } @Override protected void setPolicy() { // TODO Auto-generated method stub System.out.println("FileTypeB Policy"); } } | cs |
메인
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public class Main { public static void main(String[] args) { UserFile uf = new FileTypeA(); uf.create(); uf.printFileProperty(); uf = new FileTypeB(); uf.create(); uf.printFileProperty(); FileProperty fileProperty = new FileProperty1(); uf.setFileProperty(fileProperty); uf.printFileProperty(); } } | cs |
결과
FileTypeA Create
FileTypeA Policy
FileTypeA Create Success
File Property 1
FileTypeB Create
FileTypeB Policy
FileTypeB Create Success
File Property 2
File Property 1
'이것저것' 카테고리의 다른 글
티스토리 초대장 공유합니다. (31) | 2017.12.18 |
---|---|
[IT기사] 구글, 안드로이드 공식 개발언어로 '코틀린' 추가 (0) | 2017.05.19 |
[인터넷/휴대기기] 휴대기기 친화성 테스트 (0) | 2016.07.22 |
[네트워크] 무선랜 규격 - 802.11 A/B/G/N/AC (0) | 2016.07.22 |
다모여커뮤니티 개인정보처리방침 (0) | 2016.07.22 |
Comments