设计模式
<?php
/**
* Factory 抽象工厂的一种变形
*/
abstract class ThemeBase{
abstract public function output();
}
abstract class apptBase{
abstract public function output();
}
abstract class msgBase{
abstract public function output();
}
abstract class factoryBase{
const THEME = 1;
const ATTP = 2;
const MSG = 3;
abstract public function getIndexHeader();
abstract public function getIndexFooter();
abstract function make($type);
}
class RedThemeOutput extends ThemeBase{
public function output(){
echo 'this is red theme!!<br />';
}
}
class RedApptOutput extends apptBase{
public function output(){
echo 'this is red appt !! <br />';
}
}
class RedMsgOutput extends msgBase{
public function output(){
echo 'this is red msg !! <br />';
}
}
class RedFactory extends factoryBase{
public function getIndexHeader(){
echo '<h1><font color="red">RED</font></h1>';
}
public function getIndexFooter(){
echo '<h4>red@2010-01-01 -- '.date('Y-m-d').'</h4>';
}
public function make($type){
switch($type){
case self::ATTP :
//TODO
return new RedApptOutput();
break;
case self::THEME :
//TODO
return new RedThemeOutput();
break;
case self::MSG :
//TODO
return new RedMsgOutput();
break;
default :
throw new Exception('NOT ALLOW REQUEST!');
}
}
}
$factoryRed = new RedFactory();
$redTheme = $factoryRed->make(factoryBase::THEME);
$redAppt = $factoryRed->make(factoryBase::ATTP);
$redMsg = $factoryRed->make(factoryBase::MSG);
$factoryRed->getIndexHeader();
$redTheme->output();
$redAppt->output();
$redMsg->output();
$factoryRed->getIndexFooter();
/*$factoryGreen = new greenThemeFactory();
$greenTheme = $factoryGreen->getOutputInstance();
$greenAppt = $factoryGreen->getApptInstace();
$greenMsg = $factoryGreen->getMegInstance();
$factoryGreen->getIndexHeader();
$greenTheme->output();
$greenAppt->output();
$greenMsg->output();
$factoryGreen->getIndexFooter();*/
?>