聲明:本系列部落格參考資料《大話設計模式》,作者程傑。
用原型執行個體指定建立對象的種類,並且通過拷貝這些原型建立新的對象。Prototype模式允許一個對象再建立另外一個可定製的對象,根本無需知道任何如何建立的細節,通過將一個原型對象傳給那個要發動建立的對象,這個要發動建立的對象通過請求原型對象拷貝它們自己來實施建立。它主要面對的問題是:“某些結構複雜的對象”的建立工作;由於需求的變化,這些對象經常面臨著劇烈的變化,但是他們卻擁有比較穩定一致的介面。
在php中,類已經實現了原型模式,php有個魔術方法__clone()方法,會複製出一個這樣的對象。
看一下UML類圖:
角色分析:
1.抽象原型,提供了一個複製的介面
2.具體的原型,實現複製的介面
具體的代碼:
[php] view plain copy print?
- /**抽象原型類
- * Class Prototype
- */
- abstract class Prototype
- {
- abstract function cloned();
- }
-
- /**具體原型類
- * Class Plane
- */
- class Plane extends Prototype
- {
-
- public $color;
-
- function Fly()
- {
- echo "飛機飛啊飛!
";
- }
-
- function cloned()
- {
- return clone $this;
- }
- }
用戶端測試代碼:
[php] view plain copy print?
- header("Content-Type:text/html;charset=utf-8");
- //------------------------原型模式測試代碼------------------
- require_once "./Prototype/Prototype.php";
-
- $plane1=new Plane();
- $plane1->color="Blue";
-
- $plane2=$plane1->cloned();
-
- $plane1->Fly();
- $plane2->Fly();
-
- echo "plane1的顏色為:{$plane1->color}
";
- echo "plane2的顏色為:{$plane2->color}
";
這裡只是介紹一下原型模式的核心思想,其實在實際開發中直接clone即可。
$plane2=clone $plane1;
$plane2->Fly();
$plane2->color;
以上就介紹了php設計模式學習系列(七)--原型對象,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。