亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PHP 面向?qū)ο蟪绦蛟O(shè)計(jì)(oop)學(xué)習(xí)筆記(三) - 單例模式和工廠(chǎng)模式

 更新時(shí)間:2014年06月12日 10:06:13   投稿:hebedich  
設(shè)計(jì)模式是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過(guò)分類(lèi)編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。

毫無(wú)疑問(wèn),設(shè)計(jì)模式于己于他人于系統(tǒng)都是多贏的;設(shè)計(jì)模式使代碼編制真正工程化;設(shè)計(jì)模式是軟件工程的基石脈絡(luò),如同大廈的結(jié)構(gòu)一樣。

單例模式

當(dāng)需要保證某個(gè)對(duì)象只能有一個(gè)實(shí)例的時(shí)候,單例模式非常有用。它把創(chuàng)建對(duì)象的控制權(quán)委托到一個(gè)單一的點(diǎn)上,任何時(shí)候應(yīng)用程序都只會(huì)僅有一個(gè)實(shí)例存在。單例類(lèi)不應(yīng)該可以在類(lèi)的外部進(jìn)行實(shí)例化一個(gè)單例類(lèi)應(yīng)該具備以下幾個(gè)要素。

必須擁有一個(gè)訪(fǎng)問(wèn)級(jí)別為 private 的構(gòu)造函數(shù),有效防止類(lèi)被隨意實(shí)例化。

必須擁有一個(gè)保存類(lèi)的實(shí)例的靜態(tài)變量。

必須擁有一個(gè)訪(fǎng)問(wèn)這個(gè)實(shí)例的公共的靜態(tài)方法,該方法通常被命名為 GetInstance()。

必須擁有一個(gè)私有的空的__clone方法,防止實(shí)例被克隆復(fù)制。

下面用一個(gè)簡(jiǎn)單的單例類(lèi)的例子來(lái)說(shuō)明

復(fù)制代碼 代碼如下:

class ClassName
{
    public static $_instance;
    private function __construct()
    {
        # code...
    }
    private function __clone()
    {
        # empty
    }
    public static function GetInstance()
    {
        if(!(self::$_instance instanceof self))
        {
            self::$_instance = new self();
        }
        return self::$_instance;
    }
    public function SayHi()
    {
        echo "Hi boy!";
    }
}
$App= ClassName::GetInstance();
$App->SayHi();

/**
 *
 * Output
 *
 * Hi boy!
 *
 */

簡(jiǎn)單工廠(chǎng)模式

當(dāng)你有大量的實(shí)現(xiàn)同一接口的類(lèi)的時(shí)候,在合適的時(shí)候?qū)嵗线m的類(lèi),如果把這些 new 分散到項(xiàng)目的各個(gè)角落,不僅會(huì)使業(yè)務(wù)邏輯變的混亂并且使得項(xiàng)目難以維護(hù)。這時(shí)候如果引進(jìn)工廠(chǎng)模式的概念,就能很好的處理這個(gè)問(wèn)題。我們還可以通過(guò)應(yīng)用程序配置或者提供參數(shù)的形式讓工廠(chǎng)類(lèi)為我們返回合適的的實(shí)例。

工廠(chǎng)類(lèi),它把實(shí)例化類(lèi)的過(guò)程放到各工廠(chǎng)類(lèi)里頭,專(zhuān)門(mén)用來(lái)創(chuàng)建其他類(lèi)的對(duì)象。工廠(chǎng)模式往往配合接口一起使用,這樣應(yīng)用程序就不必要知道這些被實(shí)例化的類(lèi)的具體細(xì)節(jié),只要知道工廠(chǎng)返回的是支持某個(gè)接口的類(lèi)可以很方便的使用了。下面簡(jiǎn)單舉例說(shuō)明下工廠(chǎng)類(lèi)的使用。

復(fù)制代碼 代碼如下:

interface ProductInterface
{
    public function showProductInfo();
}
class ProductA implements ProductInterface
{
    function showProductInfo()
    {
        echo 'This is product A.';
    }
}
class ProductB implements ProductInterface
{
    function showProductInfo()
    {
        echo 'This is product B.';
    }
}
class ProductFactory
{
    public static function factory($ProductType)
    {       
        $ProductType = 'Product' . strtoupper($ProductType);
        if(class_exists($ProductType))
        {
            return new $ProductType();
        }
        else
        {
            throw new Exception("Error Processing Request", 1);
        }
    }
}
//這里需要一個(gè)產(chǎn)品型號(hào)為 A 的對(duì)象
$x = ProductFactory::factory('A');
$x -> showProductInfo();
//這里需要一個(gè)產(chǎn)品型號(hào)為 B 的對(duì)象
$o = ProductFactory::factory('B');
$o -> showProductInfo();
//都可以調(diào)用showProductInfo方法,因?yàn)槎紝?shí)現(xiàn)了接口 ProductInterface.

小結(jié)

模式就像是軟件工程的基石脈絡(luò)像大廈的設(shè)計(jì)圖紙一樣,這里接觸了兩種模式:?jiǎn)卫J胶凸こ棠J?。單例?lèi)中存在一個(gè)靜態(tài)變量保存著自身的一個(gè)實(shí)例,并且提供了獲取這個(gè)靜態(tài)變量的靜態(tài)方法。單例類(lèi)還應(yīng)該把構(gòu)造函數(shù)和clone函數(shù)標(biāo)記為私有的,防止破換實(shí)例的唯一性。工廠(chǎng)模式根據(jù)傳入的參數(shù)或程序的配置來(lái)創(chuàng)建不同的類(lèi)型實(shí)例,工廠(chǎng)類(lèi)返回的是對(duì)象,工廠(chǎng)類(lèi)在多態(tài)性編程實(shí)踐中是至關(guān)重要的。

相關(guān)文章

  • 解密ThinkPHP3.1.2版本之模板繼承

    解密ThinkPHP3.1.2版本之模板繼承

    這篇文章主要介紹了ThinkPHP3.1.2模板繼承,需要的朋友可以參考下
    2014-06-06
  • Yii2中組件的注冊(cè)與創(chuàng)建方法

    Yii2中組件的注冊(cè)與創(chuàng)建方法

    這篇文章主要介紹了Yii2之組件的注冊(cè)與創(chuàng)建的實(shí)現(xiàn)方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-10-10
  • 解決在laravel中auth建立時(shí)候遇到的問(wèn)題

    解決在laravel中auth建立時(shí)候遇到的問(wèn)題

    今天小編就為大家分享一篇解決在laravel中auth建立時(shí)候遇到的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-10-10
  • 詳解no input file specified 三種解決方法

    詳解no input file specified 三種解決方法

    這篇文章主要介紹了詳解no input file specified 三種解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • PHP 根據(jù)key 給二維數(shù)組分組

    PHP 根據(jù)key 給二維數(shù)組分組

    這篇文章主要介紹了PHP 根據(jù)key 給二維數(shù)組分組的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-12-12
  • Laravel5.5 手動(dòng)分頁(yè)和自定義分頁(yè)樣式的簡(jiǎn)單實(shí)現(xiàn)

    Laravel5.5 手動(dòng)分頁(yè)和自定義分頁(yè)樣式的簡(jiǎn)單實(shí)現(xiàn)

    今天小編就為大家分享一篇Laravel5.5 手動(dòng)分頁(yè)和自定義分頁(yè)樣式的簡(jiǎn)單實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-10-10
  • laravel多視圖共享數(shù)據(jù)實(shí)例代碼

    laravel多視圖共享數(shù)據(jù)實(shí)例代碼

    頁(yè)面視圖用于顯示文檔所有內(nèi)容在整個(gè)頁(yè)面的分布狀況和整個(gè)文檔在每一頁(yè)上的位置,并可對(duì)其進(jìn)行編輯操作,具有真正的“所見(jiàn)即所得”的顯示效果,下面這篇文章主要給大家介紹了關(guān)于laravel多視圖共享數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • PHP中模擬處理HTTP PUT請(qǐng)求的例子

    PHP中模擬處理HTTP PUT請(qǐng)求的例子

    這篇文章主要介紹了PHP中模擬處理HTTP PUT請(qǐng)求的例子,PUT請(qǐng)求會(huì)把消息本體中的消息發(fā)送到一個(gè)URL,跟POST類(lèi)似,需要的朋友可以參考下
    2014-07-07
  • Smarty保留變量用法分析

    Smarty保留變量用法分析

    這篇文章主要介紹了Smarty保留變量用法,較為詳細(xì)的介紹了Smarty常見(jiàn)保留變量的功能與使用方法,需要的朋友可以參考下
    2016-05-05
  • PHP設(shè)計(jì)模式(觀察者模式)

    PHP設(shè)計(jì)模式(觀察者模式)

    這篇文章主要介紹了PHP設(shè)計(jì)模式(觀察者模式),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評(píng)論