Вот взять для примера Sprite. Он узел-контейнер. В него можно добавить несколько спрайтов, а потом его с его детьми добавить в другой. Все спрайты имеют ссылку на родителя.
То что я делаю немного похоже на спрайт. Я делаю контейнер, который реализует интерфейс INode ( его можно сравнить с абстракцией DisplayObject ) который добавляет в себя такие же контейнеры и объекты которые не могут быть контейнерами, но тоже реализуют INode. Это нечто -

Код AS3:
package recursive
{
public class INode
{
public function INode()
{
function next():INode
function prev():INode
}
}
}
// АБСТРАКТНЫЙ КЛАСС implements INode
package recursive
{
public class AbstractClass implements INode
{
public function AbstractClass()
{
}
}
}
package recursive
{
public class SomeCustomClass extends AbstractClass
{
public function SomeCustomClass()
{
// это класс можно сравнить по своей важности
// например со Sprite
}
}
}
package recursive
{
public class CustomClass extends AbstractClass
{
public var nodes:INode
public function CustomClass()
{
// это класс можно сравнить по своей важности
// например со Sprite
}
public function setNode(node:INode):void
{
this.nodes.next = node;
}
}
}
И эту архитектуру можно было бы с лихвой оправдать схожестью с DO, DOC, Sprite и Shape...
Но в DOC, как мне кажется, все чилды хранятся, хоть и в V<DO>, хоть и типизированном, но все же массиве, который сам состоит из нод. А у меня получается и DO и ещё и нода.
Если я не найду доказывающего, что это не нарушит ООР, то и делать так не буду. Расчитываю на Вашу помощь.