设计模式-原型模式(Prototype)

PHP设计模式(原型模式)(clone) - 小粉 - 小粉收藏室
<?php
 /**
  * 原型模式
  *
  * 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
  * 
  *
 */  
//抽象原型(Prototype)角色:声明一个克隆自身的接口
 abstract class Prototype
 { 
     private $_id=null;
     
     public function __construct($id)
     {
         $this->_id =$id;
     }
 
     public function getID()
     {
         return $this->_id;
     }
 
     public function __clone() // magic function
     {
         $this->_id +=1;
     }
 
     public function getClone()
     {
         return clone $this;
     }
 }
 
 //具体原型(Concrete Prototype)角色:实现一个克隆自身的操作 
 class ConcretePrototype extends Prototype
 {
 }
 
 $objPrototype=new ConcretePrototype(0);
 $objPrototype1=clone $objPrototype;
 echo $objPrototype1->getID()."<br/>";//1

 $objPrototype2=$objPrototype;
 echo $objPrototype2->getID()."<br/>";//0
 
 $objPrototype3=$objPrototype->getClone();
 echo $objPrototype3->getID()."<br/>";//1

性能优良:原型模式是在内存二进制流的拷贝,要比直接new一个对象性能好很多,特别是要在一个循环体内产生大量的对象时,原型模式可以更好的体现其优点。

      原型模式主要用于当需要创建很多相同的类实例时,通过复制原型来快速创建。PHP中即使用clone关键词。比如我们有一个网页游戏,游戏界面有一个网格组成,每个格子可以分别用sea,forest和plains填充,这时我们需要使用 TerrainFactory来管理这个网格,由于sea,forest和plains都是差不多的,而且需要很多,就可以使用原型模式。当然每个类型的 创建还是使用抽象工厂模式。

class TerrainFactory {

    private $sea;

    private $forest;

    private $plains;

    function __construct( Sea $sea, Plains $plains, Forest $forest ) {

        $this->sea = $sea;

        $this->plains = $plains;

        $this->forest = $forest;

    }

    function getSea( ) {

            return clone $this->sea;
    }

    function getPlains( ) {

            return clone $this->plains;
    }

    function getForest( ) {

            return clone $this->forest;
    } 

}


转载于:https://my.oschina.net/u/992626/blog/112220

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值