学习php设计模式 php实现原型模式(prototype)

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了学习php设计模式 php实现原型模式(prototype)脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

一、意图

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象

二、原型模式结构图

学习php设计模式 php实现原型模式(prototype)

三、原型模式中主要角色

抽象原型(PRototyPE)角色:声明一个克隆自身的接口

具体原型(concrete Prototype)角色:实现一个克隆自身的操作

四、原型模式的优点和缺点

Prototype模式

优点

: 1、可以在运行时刻增加删除产品 2、可以改变值以指定新对象 3、可以改变结构以指定新对象 4、减少子类的构造 5、用类动态配置应用

Prototype模式的

缺点

: Prototype模式的最主要缺点就是每一个类必须配备一个克隆方法。 而且这个克隆方法需要对类的功能进行通盘考虑,这对全新的类来说不是很难,但对已有的类进行改造时,不一定是件容易的事。

五、原型模式适用场景

1、当一个系统应该独立于它的产品创建、构成和表示时,要使用Prototype模式 2、当要实例化的类是在运行时刻指定时,例如动态加载 3、为了避免创建一个与产品类层次平等的工厂类层次时; 4、当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些

六、原型模式与其它模式

抽象工厂模式(abstract factory模式):Abstract Factory模式与Prototype模式在某种方面是相互竞争的,但是也可以一起使用。

七、原型模式PHP示例

brush:PHP;">

/**

  • 具体原型角色
    */
    class ConcretePrototype implements Prototype{

private $_name;

public function __construct($name) {
$this->_name = $name;
}

public function setName($name) {
$this->_name = $name;
}

public function getName() {
return $this->_name;
}

public function copy() {
/ 深拷贝实现
$serialize_obj = serialize($this); // 序列化
$clone_obj = unserialize($serialize_obj); // 反序列化
return $clone_obj;
/
return clone $this; // 浅拷贝
}
}

/**

  • 测试深拷贝用的引用类
    */
    class Demo {
    public $array;
    }

class Client {

/**

  • Main program.
    */
    public static function main() {

$demo = new Demo();
$demo->array = array(1,2);
$object1 = new ConcretePrototype($demo);
$object2 = $object1->copy();

var_dump($object1->getName());
echo '
';
VAR_dump($object2->getName());
echo '
';

$demo->array = array(3,4);
var_dump($object1->getName());
echo '
';
var_dump($object2->getName());
echo '
';

}

}

Client::main();
?>

脚本宝典总结

以上是脚本宝典为你收集整理的学习php设计模式 php实现原型模式(prototype)全部内容,希望文章能够帮你解决学习php设计模式 php实现原型模式(prototype)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。