//单例模式(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());
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());