【设计模式】之抽象工厂模式-PHP
<?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{
abstract public function getIndexHeader();
abstract public function getIndexFooter();
abstract public function getOutputInstance(); //输出接口
abstract public function getApptInstace(); //预约接口
abstract public function getMegInstance(); //留言接口
}
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 GreenThemeOutput extends ThemeBase{
public function output(){
echo 'this is green theme!!<br />';
}
}
class GreenApptOutput extends apptBase{
public function output(){
echo 'this is green appt!!<br />';
}
}
class GreenMsgOutput extends msgBase{
public function output(){
echo 'this is green msg!!<br />';
}
}
class redThemeFactory 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 getOutputInstance(){
return new RedThemeOutput();
}
public function getApptInstace(){
return new RedApptOutput();
}
public function getMegInstance(){
return new RedMsgOutput();
}
}
class greenThemeFactory extends factoryBase{
public function getIndexHeader(){
echo '<h1><font color="green">GREEN</font></h1>';
}
public function getIndexFooter(){
echo '<h4>red@2010-01-01 -- '.date('Y-m-d').'</h4>';
}
public function getOutputInstance(){
return new GreenThemeOutput();
}
public function getApptInstace(){
return new GreenApptOutput();
}
public function getMegInstance(){
return new GreenMsgOutput();
}
}
$factoryRed = new redThemeFactory();
$redTheme = $factoryRed->getOutputInstance();
$redAppt = $factoryRed->getApptInstace();
$redMsg = $factoryRed->getMegInstance();
$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();
?>