国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP單例模式與工廠模式詳解

2024-05-04 23:59:51
字體:
供稿:網(wǎng)友

一、單例模式又稱為職責(zé)模式,它用來在程序中創(chuàng)建一個單一功能的訪問點,通俗地說就是實例化出來的對象是唯一的。
所有的單例模式至少擁有以下三種公共元素:

1. 它們必須擁有一個構(gòu)造函數(shù),并且必須被標記為private
2. 它們擁有一個保存類的實例的靜態(tài)成員變量
3. 它們擁有一個訪問這個實例的公共的靜態(tài)方法

單例類不能再其它類中直接實例化,只能被其自身實例化。它不會創(chuàng)建實例副本,而是會向單例類內(nèi)部存儲的實例返回一個引用。 

單例模式實例

<?phpclass Single {  private $name;//聲明一個私有的實例變量  private function __construct(){//聲明私有構(gòu)造方法為了防止外部代碼使用new來創(chuàng)建對象。    }   static public $instance;//聲明一個靜態(tài)變量(保存在類中唯一的一個實例)  static public function getinstance(){//聲明一個getinstance()靜態(tài)方法,用于檢測是否有實例對象   if(!self::$instance) self::$instance = new self();   return self::$instance;  }   public function setname($n){ //給變量$name賦值      $this->name = $n;    }  public function getname(){ //取變量$name的值      return $this->name;    } }   $a = Single::getinstance(); $b = Single::getinstance(); $a->setname('hello world'); $b->setname('good morning'); echo $a->getname();//good morning echo $b->getname();//good morning?>

二、工廠模式就是一種類,具有為您創(chuàng)建對象的某些方法,這樣就可以使用工廠類創(chuàng)建對象,而不直接使用new。

這樣如果想更改創(chuàng)建的對象類型,只需更改該工廠即可。

<?php//工廠類(關(guān)于運算符的操作)class factory{ public static function dx($ope){  switch($ope){   case "+":    return new plus();    break;   case "-":    return new sub();    break;   case "%":    return new rem();    break;  } }} $ope = factory::dx("+");$ope->a = 20;$ope->b = 10;echo $ope->opera();

工廠模式實例

class Factory {//創(chuàng)建一個基本的工廠類  static public function fac($id){//創(chuàng)建一個返回對象實例的靜態(tài)方法   if(1 == $id) return new A();   elseif(2==$id) return new B();   elseif(3==$id) return new C();   return new D();  } }  interface FetchName {//創(chuàng)建一個接口  public function getname();// }  class A implements FetchName{  private $name = "AAAAA";  public function getname(){       return $this->name;     } }  class C implements FetchName{  private $name = "CCCCC";  public function getname(){      return $this->name;     } } class B implements FetchName{  private $name = "BBBBB";  public function getname(){       return $this->name;    } }  class D implements FetchName{  private $name = "DDDDD";  public function getname(){       return $this->name;     }}   $o = Factory::fac(6);//調(diào)用工廠類中的方法 if($o instanceof FetchName){ echo $o->getname();//DDDDD }  $p=Factory::fac(3); echo $p->getname();//CCCCC?>

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到PHP教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 嘉义县| 贵定县| 时尚| 台东县| 正镶白旗| 扎鲁特旗| 张家界市| 黄冈市| 富源县| 兴文县| 延安市| 张家川| 股票| 金沙县| 上思县| 黑山县| 靖安县| 营口市| 中江县| 秀山| 静海县| 石门县| 三门峡市| 丹凤县| 榆社县| 邮箱| 治多县| 清水河县| 札达县| 武隆县| 保德县| 靖州| 永宁县| 通江县| 鲁甸县| 古蔺县| 白玉县| 济南市| 神池县| 康定县| 祁连县|