手机版

学习php设计模式php实现原型模式

时间:2021-09-21 来源:互联网 编辑:宝哥软件园 浏览:

1.我打算指定用原型实例创建的对象的类型,并通过复制这些原型来创建新的对象。

第三,prototype模式中的主要角色抽象Prototype角色:声明一个克隆自身的接口。

具体原型的作用:实现克隆本身的操作。

4.原型模式的优缺点:1。产品可以在运行时添加和删除;2.可以更改值以指定新对象;3.可以更改结构以指定新对象;4.子类可以减少;5.应用程序可以通过类进行动态配置。

原型模式的缺点:原型模式的主要缺点是每个类必须配备一个克隆方法。而且这种克隆方法需要全面考虑类的功能,对于全新的类来说并不是很难,但是重构现有的类不一定是一件容易的事情。

动词(verb的缩写)原型模式1的应用场景。当一个系统应该独立于它的产品被创建、组成和表示时,原型模式应该被使用。当在运行时指定要实例化的类时,例如动态加载3。为了避免创建与产品类别级别相等的工厂类别级别;4.当一个类的实例只能有几种不同状态组合中的一种时。构建相应数量的原型并克隆它们可能比每次以适当的状态手动实例化类更方便。

不及物动词原型模式和其他模式。

抽象工厂(抽象工厂模式):抽象工厂模式和原型模式在某些方面相互竞争,但也可以一起使用。

七、原型PHP示例。

?Php/** *抽象原型角色*/接口原型{ public function copy();}/* * *具体原型角色*/类具体原型实现原型{ private $ _ namepublic function _ _ construct($ name){ $ this-_ name=$ name;}公共函数setName($ name){ $ this-_ name=$ name;} public function getName(){ return $ this-_ name;} public function copy(){/* deep copy实现$ serialize _ obj=serialize($ this);//serialize $ clone _ obj=反序列化($ serialize _ obj);//反序列化返回$ clone _ obj*/return clone $ this;//轻拷贝}}/* * *测试引用类的深度拷贝*/类Demo { public $ array}类客户端{ /** *主程序。*/public static function main(){ $ Demo=new Demo();$demo-array=array(1,2);$object1=新混凝土原型($ demo);$ object 2=$ object 1-copy();var _ dump($ object 1-getName());echo ' br/';var _ dump($ object 2-getName());echo ' br/';$demo-array=array(3,4);var _ dump($ object 1-getName());echo ' br/';var _ dump($ object 2-getName());echo ' br/';} } client :3360 main();补充:轻拷贝和深拷贝。

浅复制中被复制对象的所有变量都与原始对象具有相同的值,对其他对象的引用仍然指向原始对象。也就是说,浅复制只负责当前对象实例,不复制被引用的对象。

除了引用其他对象的变量之外,深度复制复制对象的所有变量都具有与原始对象相同的值。那些引用其他对象的变量将指向复制的新对象,而不是原始引用的对象。也就是说,深度复制会复制一次要复制的对象所引用的所有对象,这种被引用对象的复制称为间接复制。深度复制应该深入多少层是一个不确定的问题。当决定以深度复制的方式复制对象时,必须决定对间接复制的对象是采用浅复制、深复制还是继续采用深复制。因此,在进行深度复制时,有必要决定它有多深。另外,在深度复制的过程中,很可能会出现循环引用的问题。

使用序列化进行深度复制使用序列化进行深度复制,将对象写入流中的过程是序列化,但在行业中,这种序列化过程称为“冻结”或“酸洗”。从流中读取对象的过程称为反序列化,也称为“解冻”或“刷新”。序列化和反序列化是通过在PHP中使用序列化和反序列化函数来实现的。

上面代码中的注释是一个序列化再反序列化的过程,实现深度复制。

以上是用php实现原型模式的代码,关于原型模式有一些概念上的差异,希望对大家的学习有所帮助。

版权声明:学习php设计模式php实现原型模式是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。