亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

MiracleWong / 2147人閱讀

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

原型設(shè)計(jì)模式

Notice:

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

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

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

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

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

模型:

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

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

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

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

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

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

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

并不是說構(gòu)造函數(shù)不能根據(jù)需要賦值,而是它與模式中其它參與者不同,因?yàn)樗枰騾⑴c者做出請(qǐng)求

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

下面用一個(gè)基于OOP的實(shí)例來解釋原型模式

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();          //實(shí)例化市場(chǎng)類、管理類、工程類
        
        $Tess = clone $this->market;    //將剛實(shí)例化的市場(chǎng)類克隆過來
        $this->setEmployee($Tess, "Tess Smith", 101, "ts101-1234", 
        "/tess.png");        //設(shè)置雇員的信息
        $this->showEmployee($Tess);         
        //展示雇員的信息,根據(jù)方法所要求的傳遞一個(gè)對(duì)象進(jìn)去
        
        $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ù)傳遞進(jìn)來的值,設(shè)置雇員的姓名、部門、id以及圖片的路徑 //這里是調(diào)用了從父類中繼承過來的方法、以及自身的方法 $employeeNow->setName($nm); $employeeNow->setDept($dp); $employeeNow->setId($id); $employeeNow->setPic("$pic"); } } $worker = new Client(); ?>

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


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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/21262.html

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

    A Loity 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<