钜码培训课程之php开发中原型模式的实现方法介绍.docxVIP

钜码培训课程之php开发中原型模式的实现方法介绍.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

..

..jz.

钜码培训课程之php开发中原型模式的实现方法介绍

本文为大家分享的是php开发中原型模式的实现方法介绍,希望对你有所帮助。

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

平行继承层次的出现是工厂方法模式带来的一个问题。这是一种让一些程序员不舒服的耦合。每次添加产品家族时,你就被迫去创建一个相关的具体创建者。在一个快速增长的系统里会包含越来越多的产品,而维护这种关系便会很快令人厌烦。

避免这种依赖的办法是使用PHP的clone关键词复制已存在的具体产品,然后,具体产品类本身便成为它们自己生成的基础。这使是原型模式。使用该模式我们可以用组合代替继承。这样的转变则促进了代码运行时的灵活性,并减少了必须创建的类的数。

假设有一款“文明”(Civilization)风格的网络游戏,可在区块组成的格子中操作战斗单元(unit)。每个区块分别代表海洋、平原和森林。地形的类别约束了占有区块的单元的格斗能力。我们可以有一个errainFactory对象来提供Sea、Forest和Plains.对象,我们决定允许用户在完全不同的环境里选择,于是Sea可能是Marssea和Earthsea的抽象父类。Forest(森林)和P1ains(平原)对象也会有相似的实现。这里的分支便构成了抽象工厂模式。我们有截然不同的产品体系(Sea、Plains、Forests),而这些产品家族间有超越继承的紧密联系,如Earth(地球)和Mars(火星),它们都同时存在海洋、森林和平原地形。图9-10所示的类图展示了如何对这些产品应用抽象工厂和工厂方法模式。

你可以看到,我们依赖继承来组合工厂生成的terrain(地形)家族产品,这的确是一个可行的解决方案,但这需要有一个大型的继承体系,并且相对来说不那么灵活。当你不想要平行的集成体系而需要最大化运行时的灵活性时,可以使用抽象工厂模式的强大变形一原型模式

lt;?php

//海洋

classSea{

//可导航性

private$navigability=0;

function__construct($navigability){

$this-gt;navigability=$navigability;

}

}

//地球海洋

classEarthSeaextendsSea{}

//火星海洋

classMarsSeaextendsSea{}

//平原

classPlains{}

//地球平原

classEarthPlainsextendsPlains{}

//火星平原

classMarsPlainsextendsPlains{}

//森岭

classForest{}

//地球森林

classEarthForestextendsForest{}

//火星森林

classMarsForestextendsForest{}

//地形工厂

classTerrainFactory{

private$sea;

private$forest;

private$plains;

function__construct(Sea$sea,Plains$plains,Forest$forest){

$this-gt;sea=$sea;

$this-gt;plains=$plains;

$this-gt;forest=$forest;

}

functiongetSea(){

returnclone$this-gt;sea;

}

functiongetPlains(){

returnclone$this-gt;plains;

}

functiongetForest(){

returnclone$this-gt;forest;

}

}

classContained{}

classContainer{

public$contained;

function__construct(){

$this-gt;contained=newContained();

}

function__clone(){

//确

文档评论(0)

192****4977 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档