讲解PHP设计模式原型模式原型——创建型

  介绍

这篇文章主要介绍”讲解PHP设计模式原型模式原型——创建型”,在日常操作中,相信很多人在讲解PHP设计模式原型模式原型——创建型问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“讲解PHP设计模式原型模式原型——创建型”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1。,概述

我们都知道,创建型模式一般是用来创建一个新的对象,然后我们使用这个对象完成一些对象的操作,我们通过原型模式可以快速的创建一个对象而不需要提供专门的新()操作就可以快速完成对象的创建,这无疑是一种非常有效的方式,快速的创建一个新的对象。

例子1:孙悟空拔下一嘬猴毛,轻轻一吹就会变出好多的孙悟空来。

例子2:寄个快递

下面是一个邮寄快递的场景:
”给我寄个快递”。顾客说。
”寄往什么地方?寄给……吗?”你问。
”和上次差不多一样,只是邮寄给另外一个地址,这里是邮寄地址……“顾客一边说一边把写有邮寄地址的纸条给你。
”好!”你愉快地答应,因为你保存了用户的以前邮寄信息,只要复制这些数据,然后通过简单的修改就可以快速地创建新的快递数据了。

2。问题

当对象的构造函数非常复杂,在生成新对象的时候非常耗时间,耗资源的情况?我们是怎么来创建呢?

3。解决方案

,,,,通过复制(克隆,拷贝)一个指定类型的对象来创建更多同类型的对象。这个指定的对象可被称为“原型”对象,也就是通过复制原型对象来得到更多同类型的对象,即原型设计模式。在php的很多模板库,都用到克隆,如smarty等。

4。适用性

原型模式的主要思想是基于现有的对象克隆一个新的对象出来,一般是有对象的内部提供克隆的方法,通过该方法返回一个对象的副本,这种创建对象的方式,相比我们之前说的几类创建型模式还是有区别的,之前的讲述的工厂模式与抽象工厂都是通过工厂封装具体的新操作的过程,返回一个新的对象,有的时候我们通过这样的创建工厂创建对象不值得,特别是以下的几个场景的时候,可能使用原型模式更简单也效率更高。

?1)当一个系统应该独立于它的产品创建,构成和表示时,要使用原型模式

?2)当要实例化的类是在运行时刻指定时,例如,通过动态装载;

?3)为了避免创建一个与产品类层次平行的工厂类层次时

?4)当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。(也就是当我们在处理一些对象比较简单,并且对象之间的区别很小,可能只是很固定的几个属性不同的时候,可能我们使用原型模式更合适)。

5。结构

,,,原型模式结构如下页上图所示:

讲解PHP设计模式原型模式原型——创建型

6。组成

客户(客户端)角色:使用原型对象的客户程序
抽象原型(原型)角色:规定了具体原型对象必须实现的接口(如果要提供深拷贝,则必须具有实现克隆的规定)
具体原型(ConcretePrototype):从抽象原型派生而来,是客户程序使用的对象,即被复制的对象。此角色需要实现抽象原型角色所要求的接口。

7。效果

原型模式有许多和抽象工厂模式和建设者模式一样的效果:它对客户隐藏了具体的产品类,因此减少了客户知道的名字的数目。此外,这些模式使客户无需改变即可使用与特定应用相关的类。

下面列出原型模式的另外一些优点。

1)运行时刻增加和删除产品:原型允许只通过客户注册原型实例就可以将一个新的具体产品类并入系统。它比其他创建型模式更为灵活,因为客户可以在运行时刻建立和删除原型。
2)改变值以指定新对象:高度动态的系统允许你通过对象复合定义新的行为,例如,通过为一个对象变量指定值,并且不定义新的类。你通过实例化已有类并且将这些实例注册为客户对象的原型,就可以有效定义新类别的对象。客户可以将职责代理给原型,从而表现出新的行为。这种设计使得用户无需编程即可定义新“类”,实际上,克隆一个原型类似于实例化一个类.Prototype模式可以极大的减少系统所需要的类的数目。
3)改变结构以指定新对象:许多应用由部件和子部件来创建对象。
4)减少子类的构造工厂方法经常产生一个与产品类层次平行的创建者类层次.Prototype模式使得你克隆一个原型而不是请求一个工厂方法去产生一个新的对象。因此你根本不需要创造者类层次。这一优点主要适用于像c++这样不将类作为一级类对象的语言。像Smalltalk和Objective - C这样的语言从中获益较少,因为你总是可以用一个类对象作为生成者。在这些语言中,类对象已经起到原型一样的作用了。

讲解PHP设计模式原型模式原型——创建型