Reading:オブ脳本(4)Compositeパターン(PHP5,ArrayIterator編)

先ほどのサンプルコードをArrayIterator使って書き換えてみました。

Bumon.php

<?php
class Bumon implements Party
{
    private $_parties;
    private $_name;

    public function __construct($name)
    {
        $this->_name = $name;
        $this->_parties = new ArrayObject();
    }
    public function addParty($party)
    {
        $this->_parties->append($party);
    }
    public function display()
    {
        echo $this->_name . "\n";
        echo "-------------------\n";
        $iterator = $this->_parties->getIterator();
        while ($iterator->valid()) {
            $iterator->current()->display();
            $iterator->next();
        }
        echo "\n";
    }
}

diff取ってみた

@@ -1,23 +1,26 @@
 <?php
 class Bumon implements Party
 {
-    private $_parties = array();
+    private $_parties;
     private $_name;

     public function __construct($name)
     {
         $this->_name = $name;
+        $this->_parties = new ArrayObject();
     }
     public function addParty($party)
     {
-        $this->_parties[] = $party;
+        $this->_parties->append($party);
     }
     public function display()
     {
         echo $this->_name . "\n";
         echo "-------------------\n";
-        foreach ($this->_parties as $party) {
-            $party->display();
+        $iterator = $this->_parties->getIterator();
+        while ($iterator->valid()) {
+            $iterator->current()->display();
+            $iterator->next();
         }
         echo "\n";
     }

記述量やや増えてますね。foreachの方が読みやすいのはもしやオブ脳じゃないから?!