php設計模式學習系列(七)--原型對象

來源:互聯網
上載者:User
聲明:本系列部落格參考資料《大話設計模式》,作者程傑。

用原型執行個體指定建立對象的種類,並且通過拷貝這些原型建立新的對象。Prototype模式允許一個對象再建立另外一個可定製的對象,根本無需知道任何如何建立的細節,通過將一個原型對象傳給那個要發動建立的對象,這個要發動建立的對象通過請求原型對象拷貝它們自己來實施建立。它主要面對的問題是:“某些結構複雜的對象”的建立工作;由於需求的變化,這些對象經常面臨著劇烈的變化,但是他們卻擁有比較穩定一致的介面。


在php中,類已經實現了原型模式,php有個魔術方法__clone()方法,會複製出一個這樣的對象。

看一下UML類圖:

角色分析:

1.抽象原型,提供了一個複製的介面

2.具體的原型,實現複製的介面

具體的代碼:

[php] view plain copy print?

  1. /**抽象原型類
  2. * Class Prototype
  3. */
  4. abstract class Prototype
  5. {
  6. abstract function cloned();
  7. }
  8. /**具體原型類
  9. * Class Plane
  10. */
  11. class Plane extends Prototype
  12. {
  13. public $color;
  14. function Fly()
  15. {
  16. echo "飛機飛啊飛!
    ";
  17. }
  18. function cloned()
  19. {
  20. return clone $this;
  21. }
  22. }


用戶端測試代碼:

[php] view plain copy print?

  1. header("Content-Type:text/html;charset=utf-8");
  2. //------------------------原型模式測試代碼------------------
  3. require_once "./Prototype/Prototype.php";
  4. $plane1=new Plane();
  5. $plane1->color="Blue";
  6. $plane2=$plane1->cloned();
  7. $plane1->Fly();
  8. $plane2->Fly();
  9. echo "plane1的顏色為:{$plane1->color}
    ";
  10. echo "plane2的顏色為:{$plane2->color}
    ";


這裡只是介紹一下原型模式的核心思想,其實在實際開發中直接clone即可。

$plane2=clone $plane1;

$plane2->Fly();

$plane2->color;

以上就介紹了php設計模式學習系列(七)--原型對象,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.