您的位置:首页 > 编程语言 > PHP开发

php设计模式学习系列(七)--原型对象

2016-03-22 14:50 706 查看
声明:本系列博客参考资料《大话设计模式》,作者程杰。

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。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 "飞机飞啊飞!<br/>";

}

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}<br/>";

echo "plane2的颜色为:{$plane2->color}<br/>";

这里只是介绍一下原型模式的核心思想,其实在实际开发中直接clone即可。

$plane2=clone $plane1;

$plane2->Fly();

$plane2->color;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: