game theory pattern code example
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.