Factoryメソッド

<?php
class ReaderFactory {
  public function create($filename){
    $reader = $this->createReader($filename);
    return $reader;
  }
  private function createReader($filename){
    if($filename == 'foo.txt'){
      return new FooReader($filename);
    }
    else if($filename == 'bar.txt'){
      return new BarReader($filename);
    } else {
      die("ERROR\n");
    }
  }
}
interface Reader {
  public function read();
  public function display();
}
class FooReader implements Reader {
  private $filename;
  public function __construct($filename){
    $this->filename = $filename;
  }
  public function read(){
    print $this->filename."を読み込みます\n";
  }
  public function display(){
    print "FooReaderで、displayします。\n";
  }
}
class BarReader implements Reader {
  private $filename;
  public function __construct($filename){
    $this->filename = $filename;
  }
  public function read(){
    print $this->filename."を読みます。ハイハイ。\n";
  }
  public function display(){
    print "BarReaderですが。何か?\n";
  }
}

$list = array('foo.txt', 'bar.txt');
for($i=0; $i<count($list); $i++){
  $factory = new ReaderFactory();
  $data = $factory->create($list[$i]);
  $data->read();
  $data->display();
  print "\n";
}
?>