Presentation is loading. Please wait.

Presentation is loading. Please wait.

Iterator と Adaptor デザインパターン 第1回

Similar presentations


Presentation on theme: "Iterator と Adaptor デザインパターン 第1回"— Presentation transcript:

1 Iterator と Adaptor デザインパターン 第1回 yukita@k.hosei.ac.jp

2 デザインパターン第1回 2 1. Iterator パターン while ( it.hasNext() ) {... = it.next();... } 配列や Vector などの実装方法に関わらずに, 上のようなことをできるようにしたい。

3 デザインパターン第1回 3 例題のクラス図 > Aggregate iterator > Iterator hasNext next BookShelf books last getBookAt appendBook getLength iterator BookShelfIterator bookShelf index hasNext next Book name getName Creates

4 デザインパターン第1回 4 book.java public class Book { private String name = ""; public Book(String name) { this.name = name; } public String getName() { return name; }

5 デザインパターン第1回 5 BookShelf.java (1) 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]; }

6 デザインパターン第1回 6 BookShelf.java (2) public void appendBook(Book book) { this.books[last] = book; last++; } public int getLength() { return last; } public Iterator iterator() { return new BookShelfIterator(this); }

7 デザインパターン第1回 7 BookShelfIterator.java (1) public class BookShelfIterator implements Iterator { private BookShelf bookShelf; private int index; public BookShelfIterator(BookShelf bookShelf) { this.bookShelf = bookShelf; this.index = 0; }

8 デザインパターン第1回 8 BookShelfIterator.java (2) public boolean hasNext() { if (index < bookShelf.getLength()) { return true; } else { return false; }

9 デザインパターン第1回 9 BookShelfIterator.java (3) public Object next() { Book book = bookShelf.getBookAt(index); index++; return book; }

10 デザインパターン第1回 10 Aggregate.java public interface Aggregate { public abstract Iterator iterator(); }

11 デザインパターン第1回 11 Iterator.java public interface Iterator { public abstract boolean hasNext(); public abstract Object next(); }

12 デザインパターン第1回 12 Main.java (1) public class Main { public static void main(String[] args) { BookShelf bookShelf = new BookShelf(4); bookShelf.appendBook( new Book("Around the World in 80 Days")); bookShelf.appendBook(new Book("Bible")); bookShelf.appendBook(new Book("Cinderella")); bookShelf.appendBook( new Book("Daddy-Long-Legs"));

13 デザインパターン第1回 13 Main.java (2) Iterator it = bookShelf.iterator(); while (it.hasNext()) { Book book = (Book)it.next(); System.out.println("" + book.getName()); }

14 デザインパターン第1回 14 実行結果 Around the World in 80 Days Bible Cinderella Daddy-Long-Legs

15 デザインパターン第1回 15 パターン > Aggregate iterator > Iterator hasNext next ConcreteAggregate iterator ConcreteIterator aggregate hasNext next Creates

16 デザインパターン第1回 16 2. Adaptor パターン(継承を使 う) インタフェースの合わないものを合わ せる。

17 デザインパターン第1回 17 例題のクラス図 > Print printWeak printStrong Banner showWithParen showWithAster PrintBanner printWeak printStrong Main uses

18 デザインパターン第1回 18 Banner.java (1) public class Banner { private String string; public Banner(String string) { this.string = string; } public void showWithParen() { System.out.println("(" + string + ")"); }

19 デザインパターン第1回 19 Banner.java (2) public void showWithAster() { System.out.println("*" + string + "*"); }

20 デザインパターン第1回 20 PrintBanner.java public class PrintBanner extends Banner implements Print { private Banner banner; public PrintBanner(String string) { this.banner = new Banner(string); } public void printWeak() { banner.showWithParen(); } public void printStrong() { banner.showWithAster(); }

21 デザインパターン第1回 21 Print.java public interface Print { public abstract void printWeak(); public abstract void printStrong(); }

22 デザインパターン第1回 22 Main.java public class Main { public static void main(String[] args) { Print p = new PrintBanner("Hello"); p.printWeak(); p.printStrong(); }

23 デザインパターン第1回 23 実行結果 (Hello) *Hello*

24 デザインパターン第1回 24 パターン Client > Target targetMethod1 targetMethod2 Adapter targetMethod1 targetMethod2 Adaptee methodA methodB methodC uses implements extends

25 デザインパターン第1回 25 3. Adaptor パターン(委譲を使 う) インタフェースの合わないものを合わ せる。

26 デザインパターン第1回 26 例題のクラス図 Print printWeak printStrong Banner showWithParen showWithAster PrintBanner banner printWeak printStrong Main uses

27 デザインパターン第1回 27 PrintBanner.java (1) public class PrintBanner extends Print { private Banner banner; public PrintBanner(String string) { this.banner = new Banner(string); } public void printWeak() { banner.showWithParen(); }

28 デザインパターン第1回 28 PrintBanner.java (2) public void printStrong() { banner.showWithAster(); }

29 デザインパターン第1回 29 Print.java public abstract class Print { public abstract void printWeak(); public abstract void printStrong(); }

30 デザインパターン第1回 30 Main.java public class Main { public static void main(String[] args) { Print p = new PrintBanner("Hello"); p.printWeak(); p.printStrong(); }

31 デザインパターン第1回 31 パターン Client Target targetMethod1 targetMethod2 Adapter adaptee targetMethod1 targetMethod2 Adaptee methodA methodB methodC uses extends has


Download ppt "Iterator と Adaptor デザインパターン 第1回"

Similar presentations


Ads by Google