單例模式當(dāng)需要保證某個(gè)對(duì)象只能有一個(gè)實(shí)例的時(shí)候,單例模式非常有用。它把創(chuàng)建對(duì)象的控 " /> 国产va精品网站精品网站精品,一本大道香蕉久在线不卡视频,一级片视频在线

一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

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

毫無(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í)例存在。單例類不應(yīng)該可以在類的外部進(jìn)行實(shí)例化一個(gè)單例類應(yīng)該具備以下幾個(gè)要素。

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

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

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

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

下面用一個(gè)簡(jiǎn)單的單例類的例子來(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)單工廠模式

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

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

復(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健卫愔写嬖谝粋€(gè)靜態(tài)變量保存著自身的一個(gè)實(shí)例,并且提供了獲取這個(gè)靜態(tài)變量的靜態(tài)方法。單例類還應(yīng)該把構(gòu)造函數(shù)和clone函數(shù)標(biāo)記為私有的,防止破換實(shí)例的唯一性。工廠模式根據(jù)傳入的參數(shù)或程序的配置來(lái)創(chuàng)建不同的類型實(shí)例,工廠類返回的是對(duì)象,工廠類在多態(tài)性編程實(shí)踐中是至關(guān)重要的。

php技術(shù)PHP 面向?qū)ο蟪绦蛟O(shè)計(jì)(oop)學(xué)習(xí)筆記(三) - 單例模式和工廠模式,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 久久综合偷拍 | 精品国产一区二区三区麻豆小说 | 欧美.成人.综合在线 | 国产91在线精品福利 | 国产www在线观看 | 亚洲精品在线网站 | 国产真实伦在线视频免费观看 | 色哟哟在线影院 | 青青伊人91久久福利精品 | 成人在线视频网站 | 新版天堂资源中文8在线 | 综合激情网站 | 国产91免费视频 | 成人一区专区在线观看 | 亚洲一区二区视频 | 日韩经典一区 | 五月开心综合 | 国产夫妻精品 | 天天色一色 | 91区国产| 亚洲国产视频网站 | 美国色视频 | 国产亚洲精品午夜高清影院 | 天天舔天天干 | 欧美成人午夜视频 | 极品美女国产精品免费一区 | xx视频在线永久免费观看 | 自偷自拍亚洲欧美清纯唯美 | caoporen国产91在线| 亚洲一区二区三区影院 | 丁香婷婷综合五月六月 | 成人福利 | 97麻豆精品国产自产在线观看 | 91久久线看在观草草青青 | 91视频福利 | 精品视频第一页 | 国产成人亚洲日本精品 | xxxxx国产| 五月综合激情久久婷婷 | 中文字幕一区二区三区有限公司 | www成人国产在线观看网站 |