{ const BLOGGS = 1; const MEGA = 2; private $mode; function __construct($mode) { $this->mode = $mode; } function getHeaderText() { switch ($this->mode) { case self::MEGA: return "MegaCal header\n"; default: return "BloggsCal header\n"; } } function getApptEncoder() { switch ($this->mode) { case self::MEGA: return new MegaApptEncoder(); default: return new BloggsApptEncoder(); } } } $man = new CommsManager(CommsManager::MEGA); print get_class($man->getApptEncoder()) . "\n"; $man = new CommsManager(CommsManager::BLOGGS); print get_class($man->getApptEncoder()) . "\n";
} } class MegaApptEncoder extends ApptEncoder { function encode() { return "Appointment data encoded in MegaCal format\n"; } } class CommsManager { const BLOGGS = 1; const MEGA = 2; private $mode = 1; function __construct($mode) { $this->mode = $mode; } function getApptEncoder() { switch ($this->mode) { case self::MEGA: return new MegaApptEncoder(); default: return new BloggsApptEncoder(); } } } $comms = new CommsManager(CommsManager::MEGA); $apptEncoder = $comms->getApptEncoder(); print $apptEncoder->encode();
} } class MegaMainEncoder extends MainEncoder { function encode() { return "Это мы чтото делали с классом MegaMainEncoder"; } } class CommsManager { const BLOG = 1; const MEGA = 2; private $mode = 1; function __construct($mode) { $this->mode = $mode; } function getMainEncoder() { switch ($this->mode) { case self::MEGA: return new MegaMainEncoder(); default: return new BlogMainEncoder(); } } } $result = new CommsManager(CommsManager::BLOG); $someClass = $result->getMainEncoder(); print $someClass->encode();