p.275,line.3-4: 集約オブジェクトが基にある内部表現を公開せずに、その要素を順にアクセスする方法を提供する。

p.280,line.24-29: しかし、そのような特権的なアクセス権は、新しい走査を定義するのを困難にする。なぜならば、それは別のフレンドクラスを追加することになるため、 aggregateのインターフェイスを変えなければならないからである。この問題を避けるために、aggregateの重要だが公開されていないメンバにアクセスするために、Iteratorクラスに保護的なオペレーションを入れておくこともできる。Iteratorのサブクラスは、aggregateに対して特権的なアクセス権を得るために、このオペレーションを使う(これはIteratorのサブクラスだけの特徴である)。
Iterator が利用するオペレーションと、公開オペレーションの名前空間分離を行なう。
Iterator が利用するオペレーションの他のモジュールが不用意に呼び出すことを避けることができる。
なお Java では JDK1.1 では package 、 JDK1.2 以降では nested class を使って、 Iterator 用のオペレーションを情報隠蔽している。しかし、この方法では、・・・という問題がある。

module aggregate {
define class Aggregate {
define abstract Iterator createIterator();
}
define class Iterator {
define abstract void first();
define abstract void next();
define abstract boolean isDone();
define abstract Object currentItem();
}
}
module aggregate.implementation extends aggregate {
define class ConcreteAggregate extends Aggregate {
Iterator createIterator() {...}
}
define class ConcreteIterator extends Iterator {
// ConcreteAggregate の内容を直接アクセス
void first() {...}
void next() {...}
boolean isDone() {...}
Object currentItem() {...}
}
}