//单例模式(singleton) class Prefences{ private $props=array(); private static $instance; public function __construct(){} public static function getinstance(){ if(empty(self::$instance)) self::$instance=new Prefences(); return self::$instance; } public function setProperty($key,$val){ $this->props[$key]=$val; } public function getProperty($key){ return $this->props[$key]; } } $pref=Prefences::getinstance(); $pref->setProperty('name','mat'); unset($pref);//移除引用 $pref2=Prefences::getinstance(); echo $pref2->getProperty('name'); //工厂模式(factory method) class CommsManager{ const BLOGGS=1; const MEGA=2; private $mode; function __construct($mode){ $this->mode=$mode; } function getHeaderText(){ switch($this->mode){ case self::BLOGGS : return "BLOGGS"; default: return "MEGA"; } } function getAPPTEncoder(){ switch($this->mode){ case self::BLOGGS : return new BLOGGSEncoder(); default: return new MEGAEncoder(); } } } //抽象工厂(abstract factory) abstract class CommManager{ const APPT =1; const TTD =2; const CONTACT=3; abstract function getHeaderText(); abstract function make($flag_int); abstract function getFooterText(); } class BloggsCommsManager extends CommsManager{ function getHeaderText(){ return "BloggsCal header\n"; } function make($flag_int){ switch($flag_int){ case self::APPT: return new BloggsApptEncoder(); case self::CONTACT: return new BloggsContactEncoder(); case self::TTD: return new BloggsTtdEncoder(); } } function getFooterText(){ return "BloggsCal footer\n"; } } //prototype(原型模式) class Sea{} class EarthSea extends Sea{} class MarsSea extends Sea{} class Plain{} class EarthPlains extends Plain{} class MarsPlains extends Plain{} class Forest{} class EarthForest extends Forest{} class MarsForest extends Forest{} class TerrainFactory{ private $sea; private $forest; private $plains; function __construct(Sea $sea,Plain $plains,Forest $forest){ $this->sea=$sea; $this->plains=$plains; $this->forest=$forest; } function getSea(){ return clone $this->sea; } function getPlains(){ return clone $this->plains; } function getForest(){ return clone $this->forest; } } $factory=new TerrainFactory( new EarthSea(),new EarthPlains(),new EarthForest() ); print_r($factory->getSea()); print_r($factory->getPlains()); print_r($factory->getForest());
php面向对象设计,php面向对象设计模式
最新推荐文章于 2021-09-16 18:11:56 发布