<?php
abstract class TagBuilderBase{
abstract function build_method_a();
abstract function build_method_b();
abstract function build_method_c();
final function base_method(){
echo "Processed : " . __METHOD__ ."</br>";
}
}
class LinkTagBuilder extends TagBuilderBase{
function __construct(){
$this->base_method();
}
function build_method_a(){
echo "Processed : " . __METHOD__ ."</br>";
}
function build_method_b(){
echo "Processed : " . __METHOD__ ."</br>";
}
function build_method_c(){
echo "Processed : " . __METHOD__ ."</br>";
}
}
class ImageTagBuilder extends TagBuilderBase{
function __construct(){
$this->base_method();
}
function build_method_a(){
echo "Processed : " . __METHOD__ ."</br>";
}
function build_method_b(){
echo "Processed : " . __METHOD__ ."</br>";
}
function build_method_c(){
echo "Processed : " . __METHOD__ ."</br>";
}
}
class Controller{
protected $builder;
function __construct($builder){
$this->builder = $builder;
}
function build(){
$this->builder->build_method_a();
$this->builder->build_method_b();
$this->builder->build_method_c();
}
}
class Main{
static function creates_link_tag(){
$link_tag_builder = new LinkTagBuilder();
$controller = new Controller($link_tag_builder);
$controller->build();
}
static function creates_image_tag(){
$image_tag_builder = new ImageTagBuilder();
$controller = new Controller($image_tag_builder);
$controller->build();
}
}
Main::creates_link_tag();
Main::creates_image_tag();
?>