<?php
interface AssetA_Base{
function method();
}
interface AssetB_Base{
function method();
}
interface AssetC_Base{
function method();
}
class AssetAX implements AssetA_Base{
function method(){}
}
class AssetBX implements AssetB_Base{
function method(){}
}
class AssetCX implements AssetC_Base{
function method(){}
}
class AssetAY implements AssetA_Base{
function method(){}
}
class AssetBY implements AssetB_Base{
function method(){}
}
class AssetCY implements AssetC_Base{
function method(){}
}
interface FactoryBase{
function create_asset_a($arg);
function create_asset_b();
function create_asset_c();
}
class FactoryX implements FactoryBase{
function create_asset_a($arg){
return new AssetAX;
}
function create_asset_b(){
return new AssetBX;
}
function create_asset_c(){
return new AssetCX;
}
}
class FactoryY implements FactoryBase{
function create_asset_a($arg){
return new AssetAY;
}
function create_asset_b(){
return new AssetBY;
}
function create_asset_c(){
return new AssetCY;
}
}
class FactoryZ implements FactoryBase{
function create_asset_a($arg){
return new AssetAY;
}
function create_asset_b(){
return new AssetAY;
}
function create_asset_c(){
return new AssetBX;
}
}
echo "case of FactoryX<br />";
$factory_x = new FactoryX;
var_dump($factory_x->create_asset_a(123));
var_dump($factory_x->create_asset_b());
var_dump($factory_x->create_asset_c());
echo "<hr />";
echo "case of FactoryY<br />";
$factory_y = new FactoryY;
var_dump($factory_y->create_asset_a(456));
var_dump($factory_y->create_asset_b());
var_dump($factory_y->create_asset_c());
echo "<hr />";
echo "case of FactoryZ<br />";
$factory_z = new FactoryZ;
var_dump($factory_z->create_asset_a(456));
var_dump($factory_z->create_asset_b());
var_dump($factory_z->create_asset_c());
?>