成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

如何使用注冊樹及工廠模式來替代使用單例模式實踐

今天就跟大家聊聊有關(guān)如何使用注冊樹及工廠模式來替代使用單例模式實踐,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)建站專注于企業(yè)網(wǎng)絡(luò)營銷推廣、網(wǎng)站重做改版、裕安網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、成都h5網(wǎng)站建設(shè)、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為裕安等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

實現(xiàn)代碼

注冊器模式非常容易理解和實現(xiàn)。一般會有一個屬性用來存放多個對象實例,以及set及get方法。set方法用來將對象實例保存在屬性數(shù)組中,get方法用來或取想要的對象實例。

class Registry
{
    // 保存實例對象
    private static $objs = [];
    
    // get獲取實例對象
    public static function get(string $alias) : Object
    {
        if (!isset(self::$objs[$alias])) {
            throw new \Exception($alias . 'not found');
        }
        
        return self::$objs[$alias];
    }
    
    // set將實例對象注冊到屬性$objs中
    public static function set (string $alias, Object $obj) : void
    {
        if (!isset(self::$objs[$alias])) {
            self::$objs[$alias] = $obj;
        }
    }
    
    // 注銷實例
    public static function unset (string $alias) :void
    {
        if (isset(self::$objs[$alias])) {
            unset(self::$objs[$alias]);
        }
    }
}

使用注冊樹模式和工廠模式來代替單例模式

我們知道,單例是非常有用的,可以避免資源浪費等。但是,單例模式已經(jīng)被認(rèn)為是一種反面模式了,認(rèn)為單例模式不好測試及維護(hù)。關(guān)于為什么單例模式被認(rèn)為是反面模式,這里就不細(xì)說了,有興趣的朋友可以自行谷歌。

那么,我們有沒有其他的方法用來保證單例,但不使用單例模式呢?有的,我們可以使用注冊樹模式和工廠模式來替代單例模式。下面是具體代碼:

class Registry
{
    // 保存實例對象
    private static $objs = [];
    
    // get獲取實例對象
    public static function get(string $alias) 
    {
        if (!isset(self::$objs[$alias])) {
            return null;
        }
        return self::$objs[$alias];
    }
    
    // set將實例對象注冊到屬性$objs中
    public static function set (string $alias, Object $obj) : void
    {
        if (!isset(self::$objs[$alias])) {
            self::$objs[$alias] = $obj;
        }
    }
    
    // 注銷實例
    public static function unset (string $alias) :void
    {
        if (isset(self::$objs[$alias])) {
            unset(self::$objs[$alias]);
        }
    }
}

class DbFactory
{
    const ALIAS = 'Db';
    
    public static function create ()
    {
        $db = Registry::get(self::ALIAS);
        if (!$db) {
            $db = new Db([
                'host' => 'localhost',
                'user' => 'root',
                'pass' => '',
                'db_name' => 'test'
            ]);
            Registry::set(self::ALIAS, $db);
        }
        
        return $db;
    }
}

當(dāng)我們需要Db實例是,只要去調(diào)用DbFactory::create即可,該方法保證了單例。下面是測試代碼:

$db = DbFactory::create();
var_dump($db);

看完上述內(nèi)容,你們對如何使用注冊樹及工廠模式來替代使用單例模式實踐有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

當(dāng)前題目:如何使用注冊樹及工廠模式來替代使用單例模式實踐
文章出自:http://jinyejixie.com/article44/johehe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、響應(yīng)式網(wǎng)站、軟件開發(fā)、標(biāo)簽優(yōu)化、關(guān)鍵詞優(yōu)化手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
洪雅县| 顺义区| 宕昌县| 昭觉县| 凤山市| 建水县| 东兰县| 郑州市| 资源县| 义马市| 绥棱县| 吉木乃县| 万荣县| 武功县| 江山市| 威宁| 武安市| 凤山县| 肥乡县| 衡阳县| 宝鸡市| 永安市| 新密市| 宁远县| 澄迈县| 甘肃省| 安新县| 十堰市| 石棉县| 剑川县| 三亚市| 南江县| 阳东县| 自治县| 鹤庆县| 安龙县| 达孜县| 盈江县| 桂平市| 高邮市| 游戏|