除非注明转载,否则本博客文章皆为原创。 MSN: wfnlxp@hotmail.com QQ: 176564452

用星际学习PHP设计模式13-原型模式

上一篇 / 下一篇  2007-04-24 10:37:16 / 个人分类:面向对象

我们一般用new来新增对象,不过很多时候新增一个对象需要一些工作。而星际里面往往会新增某些类的大量的对象,比如新增很多机枪兵和龙骑。

待解决的问题:我们能否减少new的使用,同时避免需要新增对象的时候,了解对象的类名。

思路:php5提供了克隆方法,我们可以新增一个对象,然后每次需要新增和她同类的对象,克隆他就可以了。

原型(Prototype)模式示例:

<?php

//机枪兵类

class Marine

{

  //所属的用户ID

  public $playerID

  //构造函数,参数为用户的id

  public function __construct($id)

  {

  $this->playerID = $id;

  }

}

 

//兵种的管理类

class TroopManager

{

  //数组,用于存放多个兵种的原型

  public $troopPrototype = array();

  //增加原型,第一个参数为原型的名字,第二个参数为原型对象

  public function addPrototype($name, $prototype)

  {

    $this->troopPrototype[$name] = $prototype;

  }

  //获取原型的克隆,也就是替代new的方法,参数为原型的名字

  public function getPrototype($name)

  {

    return clone $this->troopPrototype[$name];

  }

}

 

//初始化兵种的管理类

$manager = new TroopManager();

//初始化两个属于不同玩家的机枪兵的原型

$m1 = new Marine(1);

$m2 = new Marine(2);

//增加原型,同时用比较容易记忆的名字来命名原型

$manager->addPrototype('Marine of 1', $m1);

$manager->addPrototype('Marine of 2', $m2);

//当需要新增对象的时候,我们可以不必知道对象的类名和初始化的工作

$m3 = $manager->getPrototype('Marine of 1');

?>

用途总结:原型模式可以将新增对象的工作细节封装。

实现总结:需要一个原型管理类,实现增加和获取克隆原型的方法。注意这里由于为了简明,省略了一些东西,实际上我们可以在克隆方法上做一些改动,也可以用接口规范每个原型类。

 


TAG: PHP 设计模式 面向对象 原型模式

rogman的个人空间 引用 删除 rogman   /   2007-04-28 17:38:49
哈哈  经典!!!
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar