欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

PHP開發(fā)中常見的設(shè)計模式

一、工廠模式

工廠模式是我們最常用的實例化對象模式,是用工廠方法代替new操作的一種模式。

創(chuàng)新互聯(lián)主要從事網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)秭歸,十載網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220

使用工廠模式的好處是,如果你想要更改所實例化的類名等,則只需更改該工廠方法內(nèi)容即可,不需逐一尋找代碼中具體實例化的地方(new處)修改了。為系統(tǒng)結(jié)構(gòu)提供靈活的動態(tài)擴展機制,減少了耦合。

<?php

header('Content-Type:text/html;charset=utf-8');

/**

 *簡單工廠模式(靜態(tài)工廠方法模式)

 */

/**

 * Interface people 人類

 */

interface  people

{

    public function  say();

}

/**

 * Class man 繼承people的男人類

 */

class man implements people

{

    // 具體實現(xiàn)people的say方法

    public function say()

    {

        echo '我是男人<br>';

    }

}

/**

 * Class women 繼承people的女人類

 */

class women implements people

{

    // 具體實現(xiàn)people的say方法

    public function say()

    {

        echo '我是女人<br>';

    }

}

/**

 * Class SimpleFactoty 工廠類

 */

class SimpleFactoty

{

    // 簡單工廠里的靜態(tài)方法-用于創(chuàng)建男人對象

    static function createMan()

    {

        return new man();

    }

    // 簡單工廠里的靜態(tài)方法-用于創(chuàng)建女人對象

    static function createWomen()

    {

        return new women();

    }

}

/**

 * 具體調(diào)用

 */

$man = SimpleFactoty::createMan();

$man->say();

$woman = SimpleFactoty::createWomen();

$woman->say();

二、策略模式

策略模式,將一組特定的行為和算法封裝成類,以適應(yīng)某些特定的上下文環(huán)境。 

策略模式指的是程序中涉及決策控制的一種模式。策略模式功能非常強大,因為這個設(shè)計模式本身的核心思想就是面向?qū)ο缶幊痰亩嘈涡运枷搿?/p>

策略模式的三個角色:

    1.抽象策略角色

    2.具體策略角色

    3.環(huán)境角色(對抽象策略角色的引用)

實現(xiàn)步驟:

    1.定義抽象角色類(定義好各個實現(xiàn)的共同抽象方法)

    2.定義具體策略類(具體實現(xiàn)父類的共同方法)

    3.定義環(huán)境角色類(私有化申明抽象角色變量,重載構(gòu)造方法,執(zhí)行抽象方法)

就在編程領(lǐng)域之外,有許多例子是關(guān)于策略模式的。例如:

如果我需要在早晨從家里出發(fā)去上班,我可以有幾個策略考慮:我可以乘坐地鐵,乘坐公交車,走路或其它的途徑。每個策略可以得到相同的結(jié)果,但是使用了不同的資源。

<?php

    abstract class baseAgent { //抽象策略類

        abstract function PrintPage();

    }

    //用于客戶端是IE時調(diào)用的類(環(huán)境角色)

    class ieAgent extends baseAgent {

        function PrintPage() {

            return 'IE';

        }

    }

    //用于客戶端不是IE時調(diào)用的類(環(huán)境角色)

    class otherAgent extends baseAgent {

        function PrintPage() {

            return 'not IE';

        }

    }

    class Browser { //具體策略角色

        public function call($object) {

                return $object->PrintPage ();

        }

    }

    $bro = new Browser ();

    echo $bro->call ( new ieAgent () );

?>

三、單例模式

單例模式確保某個類只有一個實例,而且自行實例化并向整個系統(tǒng)提供這個實例。

單例模式是一種常見的設(shè)計模式,在計算機系統(tǒng)中,線程池、緩存、日志對象、對話框、打印機、數(shù)據(jù)庫操作、顯卡的驅(qū)動程序常被設(shè)計成單例。

單例模式分3種:懶漢式單例、餓漢式單例、登記式單例。

  1. $_instance必須聲明為靜態(tài)的私有變量

  2. 構(gòu)造函數(shù)和析構(gòu)函數(shù)必須聲明為私有,防止外部程序new 類從而失去單例模式的意義

  3. getInstance()方法必須設(shè)置為公有的,必須調(diào)用此方法 以返回實例的一個引用

  4. ::操作符只能訪問靜態(tài)變量和靜態(tài)函數(shù)

  5. new對象都會消耗內(nèi)存

  6. 使用場景:最常用的地方是數(shù)據(jù)庫連接。

  7. 使用單例模式生成一個對象后, 該對象可以被其它眾多對象所使用。

  8. 私有的__clone()方法防止克隆對象

單例模式,使某個類的對象僅允許創(chuàng)建一個。構(gòu)造函數(shù)private修飾, 
申明一個static getInstance方法,在該方法里創(chuàng)建該對象的實例。如果該實例已經(jīng)存在,則不創(chuàng)建。比如只需要創(chuàng)建一個數(shù)據(jù)庫連接。

class Single {

    private $name;//聲明一個私有的實例變量

    private function __construct(){//聲明私有構(gòu)造方法為了防止外部代碼使用new來創(chuàng)建對象。

    }

    static public $instance;//聲明一個靜態(tài)變量(保存在類中唯一的一個實例)

        static public function getinstance(){//聲明一個getinstance()靜態(tài)方法,用于檢測是否有實例對象

        if(!self::$instance) self::$instance = new self();

            return self::$instance;

    }

    public function setname($n){ $this->name = $n; }

        public function getname(){ return $this->name; }

}

$oa = Single::getinstance();

$ob = Single::getinstance();

$oa->setname('hello world');

$ob->setname('good morning');

echo $oa->getname();//good morning

echo $ob->getname();//good morning

四、注冊模式

    注冊模式,解決全局共享和交換對象。已經(jīng)創(chuàng)建好的對象,掛在到某個全局可以使用的數(shù)組上,在需要使用的時候,直接從該數(shù)組上獲取即可。將對象注冊到全局的樹上。任何地方直接去訪問。

<?php

class Register

{

    protected static  $objects;

        function set($alias,$object)//將對象注冊到全局的樹上

        {

            self::$objects[$alias]=$object;//將對象放到樹上

        }

        static function get($name){

        return self::$objects[$name];//獲取某個注冊到樹上的對象

    }

    function _unset($alias)

{

        unset(self::$objects[$alias]);//移除某個注冊到樹上的對象。

    }

}

五、適配器模式    

    將各種截然不同的函數(shù)接口封裝成統(tǒng)一的API。 

    PHP中的數(shù)據(jù)庫操作有MySQL,MySQLi,PDO三種,可以用適配器模式統(tǒng)一成一致,使不同的數(shù)據(jù)庫操作,統(tǒng)一成一樣的API。類似的場景還有cache適配器,
    可以將memcache,redis,file,apc等不同的緩存函數(shù),統(tǒng)一成一致。 

    首先定義一個接口(有幾個方法,以及相應(yīng)的參數(shù))。然后,有幾種不同的情況,就寫幾個類實現(xiàn)該接口。將完成相似功能的函數(shù),統(tǒng)一成一致的方法

接口 IDatabase

<?php

namespace IMooc;

interface IDatabase

{

    function connect($host, $user, $passwd, $dbname);

    function query($sql);

    function close();

}

<?php

namespace IMooc\Database;

use IMooc\IDatabase;

class MySQL implements IDatabase

{

    protected $conn;

        function connect($host, $user, $passwd, $dbname)

        {

            $conn = mysql_connect($host, $user, $passwd);

            mysql_select_db($dbname, $conn);

            $this->conn = $conn;

    }

    function query($sql)

        {

            $res = mysql_query($sql, $this->conn);

            return $res;

    }

    function close()

    {

        mysql_close($this->conn);

    }

}

<?php

namespace IMooc\Database;

use IMooc\IDatabase;

class MySQLi implements IDatabase

{

    protected $conn;

    function connect($host, $user, $passwd, $dbname)

    {

        $conn = mysqli_connect($host, $user, $passwd, $dbname);

        $this->conn = $conn;

    }

    function query($sql)

    {

        return mysqli_query($this->conn, $sql);

    }

    function close()

    {

        mysqli_close($this->conn);

    }

}

PDO

<?php

namespace IMooc\Database;

use IMooc\IDatabase;

class PDO implements IDatabase

{

    protected $conn;

    function connect($host, $user, $passwd, $dbname)

    {

        $conn = new \PDO("mysql:host=$host;dbname=$dbname", $user, $passwd);

        $this->conn = $conn;

    }

function query($sql)

    {

        return $this->conn->query($sql);

    }

    function close()

    {

        unset($this->conn);

    }

}

六、觀察者模式   

1:觀察者模式(Observer),當一個對象狀態(tài)發(fā)生變化時,依賴它的對象全部會收到通知,并自動更新。 

2:場景:一個事件發(fā)生后,要執(zhí)行一連串更新操作。傳統(tǒng)的編程方式,就是在事件的代碼之后直接加入處理的邏輯。當更新的邏輯增多之后,代碼會變得難以維護。
      這種方式是耦合的,侵入式的,增加新的邏輯需要修改事件的主體代碼。 

3:觀察者模式實現(xiàn)了低耦合,非侵入式的通知與更新機制。 

// 定義一個事件觸發(fā)抽象類。   

EventGenerator.php

<?php

require_once 'Loader.php';

abstract class EventGenerator{

    private $observers = array();

        function addObserver(Observer $observer){

        $this->observers[]=$observer;

    }

    function notify(){

        foreach ($this->observers as $observer){

            $observer->update();

        }

    }

}

// 定義一個觀察者接口

Observer.php

<?php

require_once 'Loader.php';

interface Observer{

    function update();//這里就是在事件發(fā)生后要執(zhí)行的邏輯

}

//一個實現(xiàn)了EventGenerator抽象類的類,用于具體定義某個發(fā)生的事件

實現(xiàn):

require 'Loader.php';

class Event extends EventGenerator{

    function triger(){

        echo "Event<br>";

    }

}

class Observer1 implements Observer{

    function update(){

        echo "邏輯1<br>";

    }

}

class Observer2 implements Observer{

    function update(){

        echo "邏輯2<br>";

    }

}

$event = new Event();

$event->addObserver(new Observer1());

$event->addObserver(new Observer2());

$event->triger();

$event->notify();

文章題目:PHP開發(fā)中常見的設(shè)計模式
文章出自:http://aaarwkj.com/article48/pchhhp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、移動網(wǎng)站建設(shè)網(wǎng)站營銷、靜態(tài)網(wǎng)站電子商務(wù)、App設(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è)
日韩人妻熟妇中文字幕| 国产高清av免费在线播放| 亚洲精品色在线网站国产呦| 水蜜桃在线观看一区二区国产| 日本中文字幕三级专区| 国产三级三级三级精品8ⅰ区| 九九热精品只有这里有| 丁香六月综合激情啪啪啪| 91老熟女露脸嗷嗷叫| 国产三级自拍视频在线观看| av天堂黄色在线观看| 伊人久久大香线蕉av色婷婷色| 亚洲精品一区二区免费看| 亚洲欧洲中文字幕一区二区| 日本一区二区不卡视频在线播放| 亚洲精品91在线中文字幕| 日韩国产欧美色资源在线| 日韩av一区二区三区在线| 色婷婷一区二区三区影片| 国产日产精品一区二区三区四区| 新人妻一区二区在线视频| 亚洲黄色片一区二区三区| 内射嫩国产欧美国产日韩欧美| 在线亚洲av不卡一区二区三区| 日本99精品视频10| 国产精品一区二区综合亚洲| 98精品熟女亚洲av| 日本一区两区三区不卡视频| 精品熟女少妇av免费久久野外| 九九热视频在线观看色| 超碰97国产资源在线| 一二三四在线观看日本资讯| 国产精品一区二区三区播放| 国产三级三级三级精品8ⅰ区| 国产精品一区二区三区激情| 久久伊人亚洲精品中文字幕| 国产亚洲高清国产拍精品| 亚洲一区二区三区精品福利| 亚洲午夜天堂精品福利天堂| 亚洲精品欧美无人区乱码| 欧美日韩亚洲精品一区二区三区 |