JavaでHello World
Google
  HOME  |  基礎  |  掲示板  |  ツール |  書籍  |  デザインパターン  |  リンク  |  フィードバック
JavaでHello World > デザインパターン > Compositeパターン  
メニュー
Home
情報交換掲示板
Factory Method
Abstract Factory
Builder
Prototype
Singleton
Adapter
Bridge
Composite
Decorator
Facade
Flyweight
Proxy
Chain Of Responsibility
Command
Interpreter
Iterator
Mediator
Memento
Observer
State
Strategy
Template Method
Visitor
  2003/07/25  田中宏和
Compositeパターン
◆概要
階層構造を表現するためにオブジェクトを木構造に組み立てる。Compositeパターンを利用することでクライアントは個々のオブジェクトとそのオブジェクトを合成したものを一様に扱うことができる
◆UML
◆ここでの環境
OS Windows XP
J2SE SDK 1.4.1_01
◆概念的なソースコード
Component.java(ここからダウンロード)
abstract class Component {
  protected String name;

  public Component(String name) {
    this.name = name;
  }

  abstract public void add(Component c);
  abstract public void remove(Component c);
  abstract public void display();
}
Composite.java(ここからダウンロード)
import java.util.*;

public class Composite extends Component {
  private ArrayList children = new ArrayList();

  public Composite(String name) {
    super(name);
  }

  public void add(Component c) {
    children.add(c);
  }

  public void remove(Component c) {
    children.remove(c);
  }

  public void display() {
    System.out.println(name);
    for (int i=0;i<children.size();i++) {
      Component c = (Component)children.get(i);
      c.display();
    }
  }
}
Leaf.java(ここからダウンロード)
public class Leaf extends Component {
  public Leaf(String name) {
    super(name);
  }

  public void add(Component c) {
    System.out.println("LeafにはComponentを追加できません");
  }
  public void remove(Component c) {
    System.out.println("Leafから削除できるComponentはありません");
  }
  public void display() {
    System.out.println(name);
  }
}
Client.java(ここからダウンロード)
public class Client {
  public static void main(String[] args) {
    Composite root = new Composite("root");
    root.add(new Leaf("1"));
    root.add(new Leaf("2"));

    Composite compA = new Composite("compA");
    compA.add(new Leaf("A1"));
    compA.add(new Leaf("A2"));
    root.add(compA);

    Composite compB = new Composite("compB");
    compB.add(new Leaf("B1"));
    compB.add(new Leaf("B2"));
    compB.add(new Leaf("B3"));
    root.add(compB);

    root.display();
  }
}
 
◆実行
コマンドプロンプト
C:\JavaHello\Composite>javac *.java

C:\JavaHello\Composite>java Client
root
1
2
compA
A1
A2
compB
B1
B2
B3

C:\JavaHello\Composite>

おおおお!実行できましたね!

 
 
  ネットで買えば断然お得!お買い物なら楽天市場
ツールの部屋 - Java関連の書籍 - デザインパターン - 情報交換掲示板 - HOME