Aggregate public interface Aggregate public interface Iterator iterator
• Aggregate 인터페이스 public interface Aggregate { public interface Iterator iterator( ) ; } • Iterator 인터페이스 public interface Iterator { public abstract boolean has. Next ( ) ; public abstract Object next( ) ; }
• Book 클래스 public class Book { private String name = “ ” ; public Book(String name) { this. name = name; } public String get. Name( ) { return name; }
• Book. Shelf 클래스 public class Book. Shelf implements Aggregate { private Book[ ] books ; private int last = 0 ; public Book. Shelf (int maxsize) { this. books = new Book[maxsize]; } public Book get. Book. At (int index) { return books[index] ; } public void append. Book (Book book) { this. books[last] = book; last++; } public int get. Length( ) { return last; } public Iterator iterator( ) { return new Book. Shelf. Iterator(this) ; } }
• Book. Shelf Iterator 클래스 public class Book. Shelf. Iterator implements Iterator { private Book. Shelf book. Shelf ; private int index ; public Book. Shelf. Iterator (Book. Shelf book. Shelf) { this. book. Shelf = book. Shelf ; this. index = 0 ; } public boolean has. Next( ) { if (index < book. Shelf. get. Length( )) { return true; } else { return false ; } } public Object next ( ) { Book book = book. Shelf. get. Book. At(index); index++ ; return book ; } }
• Main 클래스 public class Main { public static void main (String[ ] args) { Book. Shelf book. Shelf = new Book. Shelf(4) ; book. Shelf. append. Book (new Book (“A around 1 “)); book. Shelf. append. Book (new Book (“B around 2 “)); book. Shelf. append. Book (new Book (“C around 3 “)); book. Shelf. append. Book (new Book (“D around 4 “)); Iterator it = book. Shelf. iterator( ) ; while (it. has. Next( )) { Book book = (Book)it. next( ) ; System. out. println(“ ” + book. get. Name( )); } } }
N Iterator 패턴 –등장하는 역할 • Iterator의 역할 – 요소를 차례로 스캔할 인터페이스(API) 결정 • Concrete. Iterator의 역할 – Iterator 역할이 정한 인터페이스(API)를 실제로 구현->Book. Shelf. Iterator 클래스 • Aggregate의 역할 – Iterator 역할을 만들어내는 인터페이스(API) 제공 • Concrete. Aggregate의 역할 – Aggregate 역할이 정한 인터페이스(API)를 실제로 구현 <<interface>> Aggregate iterator Concrete. Aggregate iterator Creates <<interface>> Iterator has. Next next Concrete. Iterator aggregate has. Next next ->Book. Shelf 클래스
N Adapter 패턴 -예제 프로그램- 이미 제공되어진 Banner 클래스의 메소드 show. With. Paren과, show. With. Aster를 이용하 여 Print 인터페이스의 print. Weak과 print. Stong 메소드를 생성하는 프로그램 [Banner 클래스] • show. With. Paren 메소드 (Hello) • show. With. Aster 메소드 *Hello* [Printer. Banner 클래스] Adapter [Print 인터페이스] • print. Weak 메소드 (Hello) • print. Strong 메소드 *Hello*
• 2 -1 클래스에 의한 예제 프로그램의 클래스(상속) Main Uses <<interface>> Print print. Weak print. Strong Print. Banner printweak print. Strong Banner show. With. Paren show. With. Aster
• Banner 클래스 Banner public class Banner { private String string; show. With. Paren show. With. Aster public Banner(String string) { this. string = string; } public void show. With. Paren() { System. out. println("(" + string + ")"); } public void show. With. Aster() { System. out. println("*" + string + "*"); } }
• Print 인터페이스 <<interface>> Print public interface Print { print. Weak print. Strong public abstract void print. Weak(); public abstract void print. Strong(); }
• Print. Banner 클래스 public class Print. Banner extends Banner implements Print { public Print. Banner(String string) { super(string); } public void print. Weak() { show. With. Paren(); } public void print. Strong() { show. With. Aster(); } }
• Main 클래스 public class Main { public static void main(String[] args) { Print p = new Print. Banner("Rainy "); p. print. Weak(); p. print. Strong(); } }
• 2 -2 클래스에 의한 예제 프로그램의 클래스(위임) Main Uses Print print. Weak print. Strong Print. Banner banner printweak print. Strong Banner show. With. Paren show. With. Aster
• Print 클래스 public abstract class Print { Print print. Weak print. Strong • Print. Banner 클래스 public abstract void print. Weak(); public abstract void print. Strong(); } public class Print. Banner extends Print { private Banner banner; public Print. Banner(String string) { this. banner = new Banner(string); } public void print. Weak() { banner. show. With. Paren(); } public void print. Strong() { banner. show. With. Aster(); } }
• 클래스에 의한 Adapter 패턴의 클래스(상속) Client Uses <<interface>> Target implements Adapter target. Method 1 target. Method 2 extends target. Method 1 target. Method 2 Adaptee method. A method. B method. C • 인스턴스에 의한 Adapter 패턴의 클래스(위임) Client Uses Target target. Method 1 target. Method 2 extends has Adapter adaptee target. Method 1 target. Method 2 Adaptee method. A method. B method. C
- Slides: 24