原型模式在很多框架中都有用到比如:yii2中 $query1 = clone $query;这就是原型模式的使用;
原型模式是先创建好一个原型对象,然后通过clone原型对象来创建新的对象。适用于大对象的创建,因为创建一个大对象需要很大的开销,如果每次new就会消耗很大,原型模式仅需内存拷贝即可。
它主要面对的问题是:“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口
角色分析:
1.抽象原型,提供了一个克隆的接口
2.具体的原型,实现克隆的接口
/**抽象原型类
* 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/>";
总结:原型模式其实就是克隆模式,如果一个对象创建过程很麻烦然后经常需要创建,可以使用原型模式。之前的微软系统就是使用了这个模式,在每台电脑中安装一样的系统赚钱。