PHP設計模式(三),php設計模式_PHP教程

來源:互聯網
上載者:User

PHP設計模式(三),php設計模式


  • 註冊器模式

這種模式比較簡單好理解,在PHP架構中會經常用到,在某些比較大的PHP架構中,會在初始化時將一些常用的類執行個體放在註冊器中,實際是存在註冊器類中的一個靜態數組中,以後想去用它的話,直接根據名稱就可以擷取到註冊器中儲存的執行個體。而不需要再次去new這個類、getInstance或者Factory 方法獲得。我感覺這種模式有點像是把單例模式和簡單原廠模式結合起來了,執行個體化之後儲存在一個靜態數組中(類似單例模式的靜態變數),然後可以根據不同的參數去擷取註冊過的執行個體,這裡跟簡單原廠模式相比較的話,他可以動態添加執行個體進去,而不需要去修改代碼,但這裡要注意的就是必須先註冊才可以擷取。

這個模式要注意幾個要點:

1. 首先就是要一個管理要註冊的執行個體的類(例如:Register),我們就加他註冊類吧。

2. 這個註冊類必須有一個靜態陣列變數,採用索引值數組(雜湊)方式儲存這些註冊的執行個體,其中鍵對應執行個體名,值對應執行個體。

3. 當然了,_set、_get、_unset(採用底線開始僅僅是因為unset是關鍵字,然後為了統一,就都加上了)這些方法都不能少,用來設定、擷取、和銷毀註冊器中的內容。

4. 其實這個註冊類可以看做是一個裝載和卸載的過程,使用前進行裝載,當這個執行個體不在使用時就可以卸載了。

4. 這裡還需要注意,不能放太多的執行個體進去,有些執行個體用一次就可以銷毀掉了就不用儲存到註冊器中,免得浪費空間。

5. 註冊器中不同的名稱是可以儲存相同的執行個體的,因為他儲存時是有名稱作為索引。

php/** * 註冊器模式——例子 * @author 燕睿濤(luluyrt@163.com) */class Register{    /**     * @var array $objects     * 用來儲存註冊過的執行個體的變數     */    private static $_objects = array();    /**     * 註冊一個執行個體到註冊器中     * @param string $name 要註冊的類名     * @param object $obj 要註冊的類執行個體     * @return true     */    public static function _set($name,$obj){        if(!isset(self::$_objects[$name])){            self::$_objects[$name] = $obj;        }        return true;    }    /**     * 從註冊器中解除一個執行個體     * @param string $name 要註冊的類名     * @return true     */    public static function _unset($name){        if(isset(self::$_objects[$name])){            unset(self::$_objects[$name]);        }        return true;    }        /**     * 從註冊器中擷取一個執行個體     * @param string $name 要註冊的類名     * @return object/false      */    public static function _get($name){        if(isset(self::$_objects[$name])){            return self::$_objects[$name];        }        return false;    }        }class Man{    public function say(){        echo "My name is Users!!";    }}Register::_set('man1',new Man());Register::_get('man1')->say();

send Me~

http://www.bkjia.com/PHPjc/920882.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/920882.htmlTechArticlePHP設計模式(三),php設計模式 註冊器模式 這種模式比較簡單好理解,在PHP架構中會經常用到,在某些比較大的PHP架構中,會在初始化時將一...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.