Writing /volume1/Web/Public/dokuwiki/data/log/deprecated/2024-11-15.log failed

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
study:java:design_pattern:composite [2008/09/14 08:57] bananastudy:java:design_pattern:composite [2008/09/14 09:08] (現在) banana
行 255: 行 255:
 } }
 </code> </code>
 +
 +
  
 ===== NullIterator Class ===== ===== NullIterator Class =====
行 262: 行 264:
  
 **첫 번째 방법:**\\ **첫 번째 방법:**\\
-  널을 리턴한다.+널을 리턴한다.
  
-  createIterator()에서 그냥 널을 리턴할 수도 있을 것입니다. 하지만 그렇게 하면 클라이언트에서+createIterator()에서 그냥 널을 리턴할 수도 있을 것입니다. 하지만 그렇게 하면 클라이언트에서
 리턴된 값이 널인지 아닌지를 판단하기 위한 조건문을 써야 한다는 단점이 있죠. 리턴된 값이 널인지 아닌지를 판단하기 위한 조건문을 써야 한다는 단점이 있죠.
  
 **두 번째 방법: **\\ **두 번째 방법: **\\
-   %%hasNext()%%가 호출되었을 때 무조건 false를 리턴하는 반복자를 리턴한다.+%%hasNext()%%가 호출되었을 때 무조건 false를 리턴하는 반복자를 리턴한다.
  
-   이 방법이 좀 나아 보이는군요. 이렇게 하면 여전히 반복자를 리턴할 수 있기 때문에+이 방법이 좀 나아 보이는군요. 이렇게 하면 여전히 반복자를 리턴할 수 있기 때문에
 클라이언트에서는 리턴된 객체가 널 객체인지에 대해 신경 쓸 필요가 없습니다. "아무 일도 하지 않는" 클라이언트에서는 리턴된 객체가 널 객체인지에 대해 신경 쓸 필요가 없습니다. "아무 일도 하지 않는"
 반복자를 만든다고 생각하면 됩니다. 반복자를 만든다고 생각하면 됩니다.
行 296: 行 298:
 </code> </code>
  
 +
 +===== Waitress Class =====
 +여기까지 오는데 여정이 길었습니다. 이제 마지막으로 Client인 **%%Waitress%%**클래스를 구현할 차례입니다.
 +앞서 메뉴에 있는 모든 항목에 대해서 반복작업을 수행할 수 있는 방법이 생겼으므로 그 방법을 활용해서 
 +**%%Waitress%%**에 어떤 항목이 채식주의자용 메뉴인지 알아내기 위한 메소드를 추가해보도록 하겠습니다.
 +
 +<code java>
 +public class Waitress {
 +    MenuComponent allMenus;
 +
 +    public Waitress(MenuComponent allMenus) {
 +        this.allMenus = allMenus;
 +    }
 +
 +    public void printMenu() {
 +        allMenus.print();
 +    }
 +
 +    public void printVegetarianMenu() {
 +        Iterator iterator = allMenus.createIterator();
 +        System.out.println("\nVEGETARIAN MENU\n----");
 +        while (iterator.hasNext()) {
 +            MenuComponent menuComponent = (MenuComponent) iterator.next();
 +            try {
 +                if (menuComponent.isVegetarian()) {
 +                    menuComponent.print();
 +                }
 +            } catch (UnsupportedOperationException e) {}
 +        }
 +    }
 +}
 +</code>
 +
 +%%Menu%%의 %%isVegetarian()%%에서는 항상 예외를 던지도록 만들어 놨습니다. 그래서 예외가 발생하면 그 예외를
 +잡긴 하지만, 아무 일 없이 반복 작업을 계속 수행하도록 했습니다.

QR Code
QR Code study:java:design_pattern:composite (generated for current page)