成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Chap4:創(chuàng)建型設(shè)計模式————原型設(shè)計模式

MiracleWong / 2099人閱讀

摘要:原型設(shè)計模式中,原型設(shè)計模式的關(guān)鍵是要了解如何使用內(nèi)置函數(shù)抽象原型角色聲明一個克隆自身的接口具體原型角色實現(xiàn)一個克隆自身的操作原型設(shè)計模式的目的通過克隆以減少實例化對象的開銷,與其實例化新對象,完全可以使用一個已有實例的克隆注意類是原型設(shè)計

原型設(shè)計模式

Notice:

PHP中,原型設(shè)計模式的關(guān)鍵是要了解如何使用內(nèi)置函數(shù)__clone()

抽象原型角色(Prototype):聲明一個克隆自身的接口

具體原型角色(ConcretePrototype):實現(xiàn)一個克隆自身的操作

原型設(shè)計模式的目的: 通過克隆以減少實例化對象的開銷,與其實例化新對象,完全可以使用一個已有實例的克隆

注意Client類是原型設(shè)計模式中不可缺少的一部分

模型:

何時使用原型設(shè)計模式

如果一個項目要求你創(chuàng)建某個原型對象的多個實例,就可以使用原型設(shè)計模式

原型模式還可以用來創(chuàng)建一種組織結(jié)構(gòu),可以根據(jù)實際的組織來創(chuàng)建和填充其中的位置

克隆與構(gòu)造函數(shù)

克隆不會啟動構(gòu)造函數(shù)中的動作,但是可以進行賦值之類的操作,比如$this->act = "action" 這樣的操作會被執(zhí)行,但是如果要"print $this->act",那么這個打印的動作將不會被執(zhí)行

這就意味著原型設(shè)計模式不能依賴于構(gòu)造函數(shù)提供重要的輸出或返回結(jié)果

構(gòu)造函數(shù)不要做具體的工作,如果一個類實例化要完成大量初始化,結(jié)果往往不靈活,而且這是過渡耦合的設(shè)計

并不是說構(gòu)造函數(shù)不能根據(jù)需要賦值,而是它與模式中其它參與者不同,因為它需要向參與者做出請求

使用__clone()函數(shù)存在限制,但這些限制可能更有助于完成更好的OOP程序

下面用一個基于OOP的實例來解釋原型模式

name = $emName;
    }

    public function getName()
    {
        return $this->name;
    }
    
    // ID
    public function setId($emId)
    {
        $this->id = $emId;
    }

    public function getId()
    {
        return $this->id;
    }
    
    // Name
    public function setPic($ePic)
    {
        $this->employeePic = $ePic;
    }

    public function getPic()
    {
        return $this->employeePic;
    }
    abstract function __clone();
}
?>
dept = $this->sales;
                break;
            case 102:
                $this->dept = $this->promotion;
                break;
            case 103:
                $this->dept = $this->strategic;
                break;
            default:
                $this->dept = "Unreconized Marketing";
        }
    }
    public function  getDept(){
        return $this->dept;
    }
    function __clone(){}
}
?>
makeConProto();          //實例化市場類、管理類、工程類
        
        $Tess = clone $this->market;    //將剛實例化的市場類克隆過來
        $this->setEmployee($Tess, "Tess Smith", 101, "ts101-1234", 
        "/tess.png");        //設(shè)置雇員的信息
        $this->showEmployee($Tess);         
        //展示雇員的信息,根據(jù)方法所要求的傳遞一個對象進去
        
        $Jacob = clone $this->market;
        $this->setEmployee($Jacob, "Jacob Jones", 102, "jj101-2234", 
        "/jacob.png");
        $this->showEmployee($Jacob);
        
        $Ricky = clone $this->manage;
        $this->setEmployee($Ricky, "Ricky Rodrigues", 203, "rr203-5634",
         "/ricky.png");
        $this->showEmployee($Ricky);
        
        $Olivia = clone $this->engineer;
        $this->setEmployee($Olivia, "Olivia Perez", 302, "op301-1278", 
        "/olivia.png");
        $this->showEmployee($Olivia);
        
        $John = clone $this->engineer;
        $this->setEmployee($John, "John Smith", 301, "jj302-1454", 
        "/john.png");
        $this->showEmployee($John);
    }

    private function makeConProto()
    {
        $this->market = new Marketing();
        $this->manage = new Management();
        $this->engineer = new Engineering();
    }

    private function showEmployee(IAcmePrototype $employeeNow)
    {
        $pic = $employeeNow->getPic();      //獲取雇員的圖片路徑
        echo "";
        echo $employeeNow->getName() . "
"; echo $employeeNow->getDept() . ":" . $employeeNow::UNIT . "
"; echo $employeeNow->getId() . "

"; } private function setEmployee(IAcmePrototype $employeeNow, $nm, $dp, $id, $pic) { //根據(jù)傳遞進來的值,設(shè)置雇員的姓名、部門、id以及圖片的路徑 //這里是調(diào)用了從父類中繼承過來的方法、以及自身的方法 $employeeNow->setName($nm); $employeeNow->setDept($dp); $employeeNow->setId($id); $employeeNow->setPic("$pic"); } } $worker = new Client(); ?>

上面我省略了engineer類和Management類,你可以根據(jù)Marketing直接復(fù)制然后進行修改


PS:本文參考書籍:《Learning PHP設(shè)計模式》第2部分第6章

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/21262.html

相關(guān)文章

  • 用Python實現(xiàn)設(shè)計模式——建造者模式和原模式

    摘要:維基百科有對這類模式的定義在軟件工程中,創(chuàng)建型模式是處理對象對象計算機科學(xué)創(chuàng)建的設(shè)計模式設(shè)計模式計算機,試圖根據(jù)實際情況使用合適的方式創(chuàng)建對象。接下來本文將繼續(xù)介紹創(chuàng)建型模式中的另兩種模式建造者模式和原型模式,文中的代碼已托管在上。 前言 前兩篇文章介紹了單例模式和工廠模式,這兩種設(shè)計模式實際上都屬于軟件工程中的創(chuàng)建型模式(Creational Pattern)。維基百科有對這類模式的...

    CloudwiseAPM 評論0 收藏0
  • 《Java8實戰(zhàn)》-第四章讀書筆記(引入流Stream)

    摘要:內(nèi)部迭代與使用迭代器顯式迭代的集合不同,流的迭代操作是在背后進行的。流只能遍歷一次請注意,和迭代器類似,流只能遍歷一次。 流(Stream) 流是什么 流是Java API的新成員,它允許你以聲明性方式處理數(shù)據(jù)集合(通過查詢語句來表達,而不是臨時編寫一個實現(xiàn))。就現(xiàn)在來說,你可以把它們看成遍歷數(shù)據(jù)集的高級迭代器。此外,流還可以透明地并行處理,你無需寫任何多線程代碼了!我會在后面的筆記中...

    _ivan 評論0 收藏0
  • 優(yōu)才公開課筆記:php設(shè)計模式 (四)之原模式

    摘要:繼續(xù)分享設(shè)計模式的公開課,這是第四篇創(chuàng)建型模式之原型模式設(shè)計模式的一般介紹在第一篇文章講了,不了解的可以先看看。設(shè)計模式的第一部分,創(chuàng)建型模式就總結(jié)完了。下面還有兩部分結(jié)構(gòu)型設(shè)計模式和行為型設(shè)計模式稍后繼續(xù)。 繼續(xù)分享設(shè)計模式的公開課,這是第四篇創(chuàng)建型模式之原型模式 設(shè)計模式的一般介紹在第一篇文章講了,不了解的可以先看看。 原型模式: 用原型實例指定創(chuàng)建對象的種類,并且通過拷貝這個...

    Maxiye 評論0 收藏0
  • 技術(shù)攻略】php設(shè)計模式(一):簡介及創(chuàng)建模式

    摘要:我們分三篇文章來總結(jié)一下設(shè)計模式在中的應(yīng)用,這是第一篇創(chuàng)建型模式。二提煉設(shè)計模式的幾個原則開閉原則模塊應(yīng)對擴展開放,而對修改關(guān)閉。工廠模式實現(xiàn)定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類。設(shè)計模式的第一部分,創(chuàng)建型模式就總結(jié)完了。 我們分三篇文章來總結(jié)一下設(shè)計模式在PHP中的應(yīng)用,這是第一篇創(chuàng)建型模式。一、設(shè)計模式簡介 首先我們來認識一下什么是設(shè)計模式: 設(shè)計模式是一套被反復(fù)使...

    dongxiawu 評論0 收藏0
  • Chap3:創(chuàng)建設(shè)計模式————工廠方法設(shè)計模式(上)

    摘要:利用工廠方法模式,請求者發(fā)出請求,而不具體創(chuàng)建產(chǎn)品。正是因為這個原因,使用工廠方法模式可以簡化復(fù)雜的創(chuàng)建過程,關(guān)鍵就在于它在維持一個公共接口。 創(chuàng)建型設(shè)計模式 包括以下五種: 抽象工廠 生成器 工廠方法 原型 單例 我們選擇工廠方法和原型模式作為將用PHP實現(xiàn)的創(chuàng)建型設(shè)計的例子工廠方法模式是這5個設(shè)計模式中唯一的一種類設(shè)計模式原型模式屬于對象類模式,可以使用PHP_clone方法實...

    A Loity 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<