用原型實例指定創(chuàng)建對象的種類岛马,并且通過拷貝這些原型創(chuàng)建新的對象。Prototype模式允許一個對象再創(chuàng)建另外一個可定制的對象桥滨,根本無需知道任何如何創(chuàng)建的細節(jié)摆碉,通過將一個原型對象傳給那個要發(fā)動創(chuàng)建的對象,這個要發(fā)動創(chuàng)建的對象通過請求原型對象拷貝它們自己來實施創(chuàng)建顾画。它主要面對的問題是:“某些結構復雜的對象”的創(chuàng)建工作取劫;由于需求的變化匆笤,這些對象經(jīng)常面臨著劇烈的變化,但是他們卻擁有比較穩(wěn)定一致的接口谱邪。
在php中炮捧,類已經(jīng)實現(xiàn)了原型模式表鳍,php有個魔術方法__clone()方法真朗,會克隆出一個這樣的對象。
看一下UML類圖:
圖片.png
角色分析:
1.抽象原型颗味,提供了一個克隆的接口
2.具體的原型扯俱,實現(xiàn)克隆的接口
具體的代碼:
/**抽象原型類
* Class Prototype
*/
abstract class Prototype
{
abstract function cloned();
}
/**具體原型類
* Class Plane
*/
class Plane extends Prototype
{
public $color;
function Fly()
{
echo "飛機飛啊飛!<br/>";
}
function cloned()
{
return clone $this;
}
}
測試代碼:
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}<br/>";
echo "plane2的顏色為:{$plane2->color}<br/>";
這里只是介紹一下原型模式的核心思想书蚪,其實在實際開發(fā)中直接clone即可。
參考:
《大話設計模式》迅栅,作者程杰
https://blog.csdn.net/jhq0113/article/details/45274071