Dewald Botha
open source web thoughts
open source web thoughts
so i finally took the time to write some code to better articulate my thoughts on ‘game theory pattern’.
/*
* Abstract Unifier class to select objects from different sources.
*/
abstract class childObjectUnifier
{
protected $currentObjectLocation;
public function __construct()
{
$this->currentObjectLocation = get_class($this);
}
public function getData()
{
switch ($this->currentObjectLocation)
{
case 'currentServerLoginObject':
return $this->currentServerLoginFunction();
break;
case 'remoteServerLoginObject':
return $this->remoteServerLoginFunction();
break;
default:
die('Current user load not available');
}
}
}
/*
* Login Object which exists on the current server.
* This object could still be hit on the current server if the current user load is not high.
* Better utilizes the current server.
*/
class currentServerLoginObject extends childObjectUnifier
{
public function currentServerLoginFunction()
{
return 'Some function on the current server';
}
}
/*
* This login object could exist remotely, for e.g. a restfull/soap/xml-rpc service
* which could be hit if the current server load is climbing.
* Could possibly use a dedicated 'login' server if user load is exceedingly high on current machine.
*/
class remoteServerLoginObject extends childObjectUnifier
{
public function remoteServerLoginFunction()
{
return 'Some function on the remote server';
}
}
/*
* The game theory pattern which decides which objects to instantiate based on logical
* decisions made by solid data.
* In this example the current user load.
*/
class GameTheoryPattern
{
public $currentObject;
function __construct($iCurrentUserLoad)
{
$this->currentObject = $this->baseObjectUponStrategicData($iCurrentUserLoad);
}
private function baseObjectUponStrategicData($iCurrentUserLoad)
{
switch ($iCurrentUserLoad)
{
case $iCurrentUserLoad < 1000:
return new currentServerLoginObject();
break;
case $iCurrentUserLoad >= 1000 :
return new remoteServerLoginObject();
break;
default:
die('Current user load not available');
}
}
}
//GetCurrentUserLoad
$iCurrentUserLoad = 1000;
//Create Login Object based on the Game Theory Pattern
$oLogin = new GameTheoryPattern($iCurrentUserLoad);
//Call an function from the unifier class
echo $oLogin->currentObject->getData();
?>
It should be pretty self explanatory – due to the high level comments
feel free to add suggestions or comments – since i’m pretty sure there could be a better way, but for now, just to convey the message it should be sufficient.
| Print article | This entry was posted by dewaldbotha on February 17, 2009 at 10:50 am, and is filed under Uncategorized, design patterns, mvc, php. Follow any responses to this post through RSS 2.0. You can leave a response or trackback from your own site. |