Presentation is loading. Please wait.

Presentation is loading. Please wait.

JAVA 언어로 배우는 디자인 패턴 입문 chap. 1-2.

Similar presentations


Presentation on theme: "JAVA 언어로 배우는 디자인 패턴 입문 chap. 1-2."— Presentation transcript:

1 JAVA 언어로 배우는 디자인 패턴 입문 chap. 1-2

2 [목 차] ch.1 Iterator 하나씩 열거하면서 처리한다 ch.2 Adapter 필요한 형태로 수정해서 재활용한다

3  JAVA에서 배열 arr의 요소 Iterator 패턴
for (int I = 0; I < arr.length; I++) { system.out.println(arr[i]) ; } Iterator 패턴 많이 모여있는 것 중에서 하나씩 끄집어내어 열거하면서 전체를 검색하는 처리

4 Iterator 패턴 -예제 프로그램- 서가(Bookshelf) 속에 책(Book)을 넣고 그 책 이름을 순서대로 표시

5 Iterator 패턴 -예제 프로그램- Aggregate Iterator Book BookShelf
집합체를 나타내는 인터페이스 -> Bookshelf Iterator 하나씩 열거하며 스캔을 실행하는 인터페이스 -> BookshelfIterator Book 책을 나타내는 클래스 BookShelf 서가를 나타내는 클래스 BookShelfIterator 서가를 검색하는 클래스 Main 동작 테스트용 클래스

6 Aggregate 인터페이스 • Iterator 인터페이스 public interface Aggregate {
public interface Iterator iterator( ) ; } • Iterator 인터페이스 public interface Iterator { public abstract boolean hasNext ( ) ; public abstract Object next( ) ; }

7 Book 클래스 public class Book { private String name = “ ” ;
public Book(String name) { this.name = name; } public String getName( ) { return name;

8 BookShelf 클래스 public class BookShelf implements Aggregate {
private Book[ ] books ; private int last = 0 ; public BookShelf (int maxsize) { this.books = new Book[maxsize]; } public Book getBookAt (int index) { return books[index] ; public void appendBook (Book book) { this.books[last] = book; last++; public int getLength( ) { return last; public Iterator iterator( ) { return new BookShelfIterator(this) ;

9 BookShelf Iterator 클래스
public class BookShelfIterator implements Iterator { private BookShelf bookShelf ; private int index ; public BookShelfIterator (BookShelf bookShelf) { this.bookShelf = bookShelf ; this.index = 0 ; } public boolean hasNext( ) { if (index < bookShelf.getLength( )) { return true; } else { return false ; public Object next ( ) { Book book = bookShelf.getBookAt(index); index++ ; return book ;

10 Main 클래스 public class Main {
public static void main (String[ ] args) { BookShelf bookShelf = new BookShelf(4) ; bookShelf.appendBook (new Book (“A around 1 “)); bookShelf.appendBook (new Book (“B around 2 “)); bookShelf.appendBook (new Book (“C around 3 “)); bookShelf.appendBook (new Book (“D around 4 “)); Iterator it = bookShelf.iterator( ) ; while (it.hasNext( )) { Book book = (Book)it.next( ) ; System.out.println(“ ” + book.getName( )); }

11 Iterator 패턴 –등장하는 역할- Iterator의 역할 ConcreteIterator의 역할 Aggregate의 역할
요소를 차례로 스캔할 인터페이스(API) 결정 ConcreteIterator의 역할 Iterator 역할이 정한 인터페이스(API)를 실제로 구현->BookShelfIterator 클래스 Aggregate의 역할 Iterator 역할을 만들어내는 인터페이스(API) 제공 ConcreteAggregate의 역할 Aggregate 역할이 정한 인터페이스(API)를 실제로 구현 ->BookShelf 클래스 Creates  <<interface>> Aggregate iterator <<interface>> Iterator hasNext next ConcreteAggregate iterator ConcreteIterator aggregate hasNext next

12 Iterator 패턴 결론 관련 패턴 디자인 패턴은 추상클래스와 인터페이스를 도입함으로써 클래스의 재사용성을 촉진시킴
Iterator 패턴은 Visitor 패턴(13장), Composite 패턴(11장) Factory Method 패턴(4장)과 관련된 패턴임.

13 - 클래스에 의한 Adapter 패턴(상속을 이용한 것) ->예제 2-1
• 정의 - ‘이미 제공되어 있는 것’과 ‘필요한 것’ 사이의 ‘간격’을 메우는 디자인 패턴 - Wrapper 패턴이라고도 함. • 종류 - 클래스에 의한 Adapter 패턴(상속을 이용한 것) ->예제 2-1 - 인스턴스에 의한 Adapter 패턴(위임을 이용한 것) ->예제 2-2

14 [PrinterBanner 클래스]  Adapter
이미 제공되어진 Banner 클래스의 메소드 showWithParen과, showWithAster를 이용하여 Print 인터페이스의 printWeak과 printStong 메소드를 생성하는 프로그램 [Banner 클래스] • showWithParen 메소드  (Hello) • showWithAster 메소드  *Hello* [PrinterBanner 클래스]  Adapter [Print 인터페이스] • printWeak 메소드 (Hello) • printStrong 메소드 *Hello*

15 <<interface>>
2-1 클래스에 의한 예제 프로그램의 클래스(상속) <<interface>> Print printWeak printStrong Banner showWithParen showWithAster PrintBanner printweak Main Uses 

16 Banner 클래스 public class Banner { private String string;
public Banner(String string) { this.string = string; } public void showWithParen() { System.out.println("(" + string + ")"); public void showWithAster() { System.out.println("*" + string + "*"); Banner showWithParen showWithAster

17 <<interface>>
Print 인터페이스 public interface Print { public abstract void printWeak(); public abstract void printStrong(); } <<interface>> Print printWeak printStrong

18 PrintBanner 클래스 public class PrintBanner extends Banner implements Print { public PrintBanner(String string) { super(string); } public void printWeak() { showWithParen(); public void printStrong() { showWithAster();

19 Main 클래스 public class Main { public static void main(String[] args) {
Print p = new PrintBanner("Rainy "); p.printWeak(); p.printStrong(); }

20 2-2 클래스에 의한 예제 프로그램의 클래스(위임)
Main Uses  Print printWeak printStrong PrintBanner Banner showWithParen showWithAster banner printweak printStrong

21 Print 클래스 PrintBanner 클래스 public abstract class Print {
public abstract void printWeak(); public abstract void printStrong(); } Print printWeak printStrong PrintBanner 클래스 public class PrintBanner extends Print { private Banner banner; public PrintBanner(String string) { this.banner = new Banner(string); } public void printWeak() { banner.showWithParen(); public void printStrong() { banner.showWithAster();

22 Adapter 패턴 –등장하는 역할- Target의 역할 Client의 역할 Adaptee의 역할 Adapter의 역할
필요로 하는 메소드를 제공 -> Print 인터페이스(상속), Print 클래스(위임) Client의 역할 Target 역할의 메소드를 사용해서 일을 하는 역할 ->Main 클래스 Adaptee의 역할 - 준비되어 있는 메소드를 가지고 있는 역할 -> Banner 클래스 Adapter의 역할 Adaptee 역할의 메소드를 사용해서 Target 역할을 충족시킴 ->PrintBanner 클래스

23 <<interface>>
• 클래스에 의한 Adapter 패턴의 클래스(상속) Client Uses  implements extends <<interface>> Target targetMethod1 targetMethod2 Adapter targetMethod1 targetMethod2 Adaptee methodA methodB methodC • 인스턴스에 의한 Adapter 패턴의 클래스(위임) Client Uses  extends has Target targetMethod1 targetMethod2 Adapter Adaptee adaptee methodA methodB methodC targetMethod1 targetMethod2

24 Adapter 패턴 결론 1 결론 2 관련 패턴 기존 클래스를 수정하여 필요한 클래스를 만듦으로써 클래스의 재사용성을 촉진시킴
기존 버전과 새로운 버전의 공존과, 보수를 간단하게 함. 관련 패턴 Bridge 패턴(9장), Decorator 패턴(12장)


Download ppt "JAVA 언어로 배우는 디자인 패턴 입문 chap. 1-2."

Similar presentations


Ads by Google