溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

php常用的設(shè)計(jì)模式有哪些

發(fā)布時(shí)間:2021-07-09 09:39:12 來源:億速云 閱讀:121 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“php常用的設(shè)計(jì)模式有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

一、單例模式

1,含義

某個(gè)類只有一個(gè)實(shí)例,自動(dòng)實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)類的實(shí)例。

即:應(yīng)用程序只會(huì)有這個(gè)類的一個(gè)實(shí)例存在。

多用在數(shù)據(jù)庫操作,線程池,緩存,打印機(jī)中。

2,特點(diǎn)

只有一個(gè)實(shí)例,必須有構(gòu)造函數(shù),標(biāo)記為private

向其他成員提供訪問這個(gè)實(shí)例的靜態(tài)方法

必須自行創(chuàng)建這個(gè)實(shí)例,擁有一個(gè)保存類的實(shí)例的靜態(tài)成員變量

3,代碼

class SingleCase {

    private static $_instance;

    private function __construct() {
       echo 'i has been'; 
    }
    
    public static function getInstance() {
       if(!isset(self::$_instance)) {
           self::$_instance = new self();
       }
       return self::$_instance;
    }
    
    private function __clone() {
    }
}

備注:存在難以調(diào)試,隱藏著依賴關(guān)系

二、工廠模式

1,含義

工廠模式是一個(gè)類,而這個(gè)類包含一些方法,這些方法的作用或者功能就是實(shí)例化對(duì)象

工廠模式通常用來返回符合類似接口的不同的類

2,特點(diǎn)

工廠模式一般有一個(gè)命名為Factory的靜態(tài)方法

這個(gè)靜態(tài)方法接收一個(gè)參數(shù)

這個(gè)靜態(tài)方法根據(jù)參數(shù),返回不同的對(duì)象實(shí)例

3,代碼

class Factory {
    static public function getUser($type) {
        if ($type == 1) {
            return new A();
        }
        return new B();
    }
}

interface FetchName {
    public function getName()
}

class A implements FetchName {
    public function getName()
}

class B implements FetchName {
    public function getName()
}

//使用

$user = Factory::getUser(1);
$user->getName();

備注:有啥用?

如果一個(gè)系統(tǒng),很多地方用 new User() 這種方式。有一天 new User('A');增加個(gè)參數(shù),所有地方都需要變更;

如果一個(gè)系統(tǒng),使用工廠模式User::getObj('1');  假如參數(shù)1返回new User()這個(gè)對(duì)象實(shí)例; 有一天new User() 增加個(gè)參數(shù),我只需要改工廠中的類實(shí)例。

三、觀察者模式

1,含義

觀察者模式為您提供了避免組件之間緊密耦合的另一種方法

分為主題和觀察者,都需要實(shí)現(xiàn)接口和方法

主題里面進(jìn)行觀察者注冊(cè),并設(shè)置一個(gè)方法,這個(gè)方法的作用是調(diào)用觀察者的方法進(jìn)行通知觀察者

2,特點(diǎn)

針對(duì)接口編程,不針對(duì)實(shí)現(xiàn)編程

觀察者模式定義對(duì)象的一對(duì)多依賴

當(dāng)一個(gè)對(duì)象改變狀態(tài)時(shí),它的所有依賴者都會(huì)收到通知并自動(dòng)更新

3,代碼

class Paper {
    private $myObj = [];
    public function register($sub) {
        $this->myObj[] = $sub;
    }
    public function setMessage(){
      if ($this->myObj) {
          foreach ($this->myObj as $obj) {
              $obj->update();
          }
      }
    }
}

interface Observerable{
    public function update();
}

class Subscriber implements Observerable{
    public function update(){
        echo "Callback\n";
    }
}

備注:

$paper = new Paper();
$paper->register(new Subscriber());
//$paper->register(new Subscriber1());
$paper->setMessage();

只要任何類注冊(cè),調(diào)用setMessage()方法。其他注冊(cè)過的類都會(huì)收到update()方法的通知。

“php常用的設(shè)計(jì)模式有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI