<2007/06/15 追記>
これからデザインパターンのコードをUPしていく予定でしたが、

まったく同じ事を既にされている方がいらっしゃって、内容がモロ被りなので
UPしていくのはやめます。わずか一回目で…早い!w
勉強は続けますけどね!

こちらのBlogです。やはり同じようなポイントで悩んでらっしゃったようで、参考になりました!
minfish.jp/blog: ActionScript2.0でデザインパターン(Iteratorの巻き)

</追記>

デザインパターン一回目。こちらの「増補改訂版Java言語で学ぶデザインパターン入門」のサンプルをActionScriptにしただけです。著作権マズいでしょうか…。本には、もっと詳しい説明が載っています。

抽象クラスなどAS2.0にはない概念は、FLASH OOPのサンプルを参考に、コンストラクタをprivateにするとかしてます。
完全にJavaのソースをASにしたわけじゃないので注意です。
というか、抽象クラス、インターフェイスは初めてなので、良く分かってません。

以下、メモ入りまくりのソース。
もっと良い書き方がある!っていうトコは教えて下さい。助かります。

Aggregateインターフェイス
Aggregate・・・「集約」の意
【集約】(名)スル
集めて一つのものにまとめること。
「各支部の意見を-する」

//集合体を表すクラスがこのインターフェイスを実装する
interface Aggregate
{
	//makeIteratorメソッドを実装しなければならない
    public function makeIterator():Iterator;
}

Iteratorインターフェイス
Iterator・・・「繰り返す」「反復子」の意
集合体を走査する
今回はnextだけだが、前に戻るpreviousとかもアリ。

interface Iterator {
	//hasNext、nextメソッドを実装しなければならない
    public function hasNext():Boolean;//次ぎがあるか調べる
    public function next():Object;//次ぎに進める
}

Bookクラス
本を表現するクラス

class Book{
	private var name:String;//本の名前
	//コンストラクタ
	public function Book(name:String)
	{
		this.name = name;
	}

	public function get _name():String
	{
		//自分の名前を返す
		return name;
	}
}

BookShelfクラス
本を入れる本棚を表現するクラス

class BookShelf implements Aggregate//集合体を表すAggregateを実装
{
	private var book_array:Array;//Bookインスタンス(本)を保存
	//コンストラクタ
	public function BookShelf()
	{
		//本棚を作成
		this.book_array = new Array();
	}

	public function appendBook(book:Book)
	{
		//本棚に本を入れる
		book_array.push(book);
	}

	public function getBookAt(index:Number):Book
	{
		//指定された番号の本を返す
		return book_array[index];
	}

	public function getLength():Number
	{
		//本棚の大きさ(配列の長さ)を返す
		return book_array.length;
	}

	public function makeIterator():Iterator
	{
		//BookShelfIteratorインスタンスを生成して返す
		return new BookShelfIterator(this);
	}
}

BookShelfIteratorクラス
本棚(BookShelfインスタンス)を自分のプロパティとして持ち、管理する

//本棚を自分のプロパティとして持ち、管理する
class BookShelfIterator implements Iterator
{
    private var bookShelf:BookShelf;//管理する本棚
    private var index:Number;//注目する本棚の番号
	//コンストラクタ
    public function BookShelfIterator(bookShelf:BookShelf)
	{
		//管理する本棚を格納する
        this.bookShelf = bookShelf;
        index = 0;
    }

	public function hasNext():Boolean
	{
		//bookShelf.getLength()は本棚に入っている本の数を返す
        if (index < bookShelf.getLength()) {
			//まだ本棚に本が入っていればture
            return true;
        } else {
			//もう本棚に本がなければfalse
            return false;
        }
    }

    public function next():Object
	{
		//注目している本を返し、注目番号を次に進める
        var book:Book = bookShelf.getBookAt(index);
        index++;
        return book;
    }
}

Mainクラス
注目:whileループで使われているのは、iteratorのメソッドのみで、
bookShelfクラスの実装でつかわれているメソッドは使っていない。
よって、bookShelfクラスの実装に依存しない。
bookShelfクラスが管理の仕方を変更しても、
bookShelfがmakeIteratorメソッドを持っていて、
正しくiteratorを返してくれればいい。
つまり、Iteratorインターフェイスを正しく実装しているインスタンスを返してくれれば、
whileループはまったく変更しなくても動作する

class Main
{
	public function Main()
	{
		var bookShelf:BookShelf = new BookShelf();//本棚を作る
		//本を作って本棚に入れる
		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"));

		var iterator:Iterator = bookShelf.makeIterator();

		while (iterator.hasNext())//まだ本棚に本があれば繰り返す
		{
			//iterator.next()・・・今注目している番号の本を返し、番号を一つ進める
			var book:Book = Book(iterator.next());
			trace(book._name);
		}
	}
}

実行結果
flaファイル_root第一フレーム

var main:Main = new Main();var main:Main = new Main();
/*出力
Around the World in 80 Days
Bible
Cinderella
Daddy-Long-Legs
*/

まとめ?
集合体、いろいろあると思うんですが、xmlを解析する時とかに
使えるのかな?
取り敢えず今度使ってみよう。

今回のソースはこちら。コメントアウトが沢山はいったままですが、よければどうぞ。