TemplateMethod

<?php
abstract class AbstractDisplay {
    private $data;

    public function __construct($data) {
        if (!is_array($data)) {
            $data = array($data);
        }
        $this->data = $data;
    }

    public function display() {
        $this->displayHeader();
        $this->displayBody();
        $this->displayFooter();
    }

    public function getData() {
        return $this->data;
    }

    protected abstract function displayHeader();
    protected abstract function displayBody();
    protected abstract function displayFooter();
}


class ListDisplay extends AbstractDisplay {
    protected function displayHeader() {
        echo '<dl>';
    }

    protected function displayBody() {
        foreach ($this->getData() as $key => $value) {
            echo '<dt>Item ' . $key . '</dt>';
            echo '<dd>' . $value . '</dd>';
        }
    }

    protected function displayFooter() {
        echo '</dl>';
    }
}

$data = array('Design Pattern',
              'Gang of Four',
              'Template Method Sample1',
              'Template Method Sample2');

$display1 = new ListDisplay($data);
$display1->display();
?>