單例模式當需要保證某個對象只能有一個實例的時候,單例模式非常有用。它把創建對象的控 " /> 黄色福利小视频,中国毛片网,91四虎国自产在线播放线

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

PHP 面向對象程序設計(oop)學習筆記(三) - 單例模式和工廠模式

毫無疑問,設計模式于己于他人于系統都是多贏的;設計模式使代碼編制真正工程化;設計模式是軟件工程的基石脈絡,如同大廈的結構一樣。

單例模式

當需要保證某個對象只能有一個實例的時候,單例模式非常有用。它把創建對象的控制權委托到一個單一的點上,任何時候應用程序都只會僅有一個實例存在。單例類不應該可以在類的外部進行實例化一個單例類應該具備以下幾個要素。

必須擁有一個訪問級別為 private 的構造函數,有效防止類被隨意實例化。

必須擁有一個保存類的實例的靜態變量。

必須擁有一個訪問這個實例的公共的靜態方法,該方法通常被命名為 GetInstance()。

必須擁有一個私有的空的__clone方法,防止實例被克隆復制。

下面用一個簡單的單例類的例子來說明

復制代碼 代碼如下:
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!
 *
 */

簡單工廠模式

當你有大量的實現同一接口的類的時候,在合適的時候實例化合適的類,如果把這些 new 分散到項目的各個角落,不僅會使業務邏輯變的混亂并且使得項目難以維護。這時候如果引進工廠模式的概念,就能很好的處理這個問題。我們還可以通過應用程序配置或者提供參數的形式讓工廠類為我們返回合適的的實例。

工廠類,它把實例化類的過程放到各工廠類里頭,專門用來創建其他類的對象。工廠模式往往配合接口一起使用,這樣應用程序就不必要知道這些被實例化的類的具體細節,只要知道工廠返回的是支持某個接口的類可以很方便的使用了。下面簡單舉例說明下工廠類的使用。

復制代碼 代碼如下:
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);
        }
    }
}
//這里需要一個產品型號為 A 的對象
$x = ProductFactory::factory('A');
$x -> showProductInfo();
//這里需要一個產品型號為 B 的對象
$o = ProductFactory::factory('B');
$o -> showProductInfo();
//都可以調用showProductInfo方法,因為都實現了接口 ProductInterface.

小結

模式就像是軟件工程的基石脈絡像大廈的設計圖紙一樣,這里接觸了兩種模式:單例模式和工程模式。單例類中存在一個靜態變量保存著自身的一個實例,并且提供了獲取這個靜態變量的靜態方法。單例類還應該把構造函數和clone函數標記為私有的,防止破換實例的唯一性。工廠模式根據傳入的參數或程序的配置來創建不同的類型實例,工廠類返回的是對象,工廠類在多態性編程實踐中是至關重要的。

php技術PHP 面向對象程序設計(oop)學習筆記(三) - 單例模式和工廠模式,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 亚洲区欧美区小说区图片区 | 色影视| 好吊色49paopao视频 | 91亚洲欧美综合高清在线 | 亚洲手机国产精品 | 一区二区三区四区国产精品 | 中文字幕第13亚洲另类 | 久草热视频在线 | 亚洲伊人色| 开心激情五月婷婷 | 国产欧美自拍视频 | 中文字幕一区婷婷久久 | 国产精品色婷婷在线观看 | 国产精品久久国产精麻豆99网站 | 免费激情小视频 | 欧美性一交激情视频在线 | 五月婷综合| 劲爆欧美第一页 | 玖玖99视频 | 91色视频在线观看 | 色天天综合色天天碰 | 91久久国产 | 免费韩国一级毛片 | 国产区精品一区二区不卡中文 | 一本久久a久久精品亚洲 | 最新国产成人综合在线观看 | 成人综合激情 | 久久er国产精品免费观看2 | 精品国产免费第一区二区三区日韩 | 亚洲成a人v天堂网 | 九九99re在线视频精品免费 | 欧美日韩一区妖精视频yjsp | 草草草视频在线观看 | 精品久久久久久无码中文字幕 | 免费国产人做人视频在线观看 | 中文字幕一区在线观看视频 | 国产精品特黄一级国产大片 | 亚洲影视在线 | 人人做人人爽人人爱秋霞影视 | 91久久婷婷国产综合精品青草 | 99精品在免费线视频 |