PHP單例模式與工廠模式詳解
一、單例模式又稱為職責模式,它用來在程序中創(chuàng)建一個單一功能的訪問點,通俗地說就是實例化出來的對象是唯一的。
所有的單例模式至少擁有以下三種公共元素:
1. 它們必須擁有一個構(gòu)造函數(shù),并且必須被標記為private
2. 它們擁有一個保存類的實例的靜態(tài)成員變量
3. 它們擁有一個訪問這個實例的公共的靜態(tài)方法
單例類不能再其它類中直接實例化,只能被其自身實例化。它不會創(chuàng)建實例副本,而是會向單例類內(nèi)部存儲的實例返回一個引用。
單例模式實例
<?php
class 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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于thinkPHP實現(xiàn)的微信自定義分享功能示例
這篇文章主要介紹了基于thinkPHP實現(xiàn)的微信自定義分享功能,結(jié)合實例形式分析了thinkPHP調(diào)用微信接口實現(xiàn)自定義分享功能的相關(guān)操作技巧,需要的朋友可以參考下2016-09-09
web server使用php生成web頁面的三種方法總結(jié)
web server使用php生成web頁面的三種方法。需要的朋友可以過來參考下,希望對大家有所幫助2013-10-10
國產(chǎn)PHP開發(fā)框架myqee新手快速入門教程
這篇文章主要介紹了國產(chǎn)PHP開發(fā)框架myqee新手快速入門教程,myqee中文名稱邁啟PHP框架,有比較多的高級開發(fā)特性,需要的朋友可以參考下2014-07-07
php 提交表單 關(guān)閉layer彈窗iframe的實例講解
今天小編就為大家分享一篇php 提交表單 關(guān)閉layer彈窗iframe的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08
Codeigniter的一些優(yōu)秀特性總結(jié)
本文總結(jié)了一下Codeigniter的一些優(yōu)秀特性,算是個人的一些心得分享,推薦給大家。2015-01-01
laravel Model 執(zhí)行事務的實現(xiàn)
今天小編就為大家分享一篇laravel Model 執(zhí)行事務的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10

