background image

}}
$war = War3::runWar();$war2 = War3::runWar();$war3 = War3::runWar();

 

运 行一下,结果是:War3 is Running.太好了,我双击了这么多次,也就只运行了一个魔兽,现在随便你怎么

 

打开,机子都不会爆 掉了。这就是传说中的单价模式,主要用于一些很占资源的而且实例仅有一个实例就够
用的东西,比如,zend framework

 

中的 Zend_Controller_Front 前端控制器,就是采用单价模式来设计的,大家

有兴趣的话可以看看那个。

 

二、策略模式:问 题的提出:在此模式中,算法是从复杂类提取的,因而可以方便地替换。例如,如果要更

 

 —— 

改搜索引擎中排列页的方法,则策略模式是一个不错的选择。思考 一下搜索引擎的几个部分

一部分遍历

页面,一部分对每页排列,另一部分基于排列的结果排序。在复杂的示例中,这些部分都在同一个类中。通过

 

使用策略模式,您可将排列部分放入另一个 类中,以便更改页排列的方式,而不影响搜索引擎的其余代码。

 

问题的解决:呵呵,不讲那么复杂,刚才魔兽好不容易打开了,我们还是玩魔兽好 了。下面我们选 battle,哇
好多种族啊,有人族(Human),兽族(ORC),暗夜精灵族(Nighy Elf),不死族(Undead)。我选精灵族
(Nighy Elf),再选一个精灵族和两个兽族(ORC),一个兽族和我是一家的,另一个精灵族和兽族是另一家

 

的。每一个玩家在进入游戏后都会得到一些资 源,如一个大厅,五个小精灵(苦工)和一个矿山。这些可以
称为是初始化的一些东西,这里我们就可以用到策略模式来封装这些初始化。

 

进入正 题,首先我们来构建一个玩家类:<?phpclass player{
//玩家名字
protected $_name;
//种族
protected $_race;
//队伍
protected $army;
//建筑
protected $building;
//人口
protected $population;
//黄金
protected $gold;
//木材
protected $wood;
 
//构造函数,设定所属种族
public function __construct($race)
{
$this->race = $race;
}
//__get() 方法用来获取保护属性
private function __get($property_name)
{
if(isset($this->$property_name)) {
return($this->$property_name);
}
else {
return(NULL);
}
}
 
//__set() 方法用来设置保护属性
private function__set($property_name,$value)
{
$this->$property_name=$value;
}}

 

接 着,我们再建一个玩家初始化的接口,
<?phpinterface initialPlayer{
// 制造初始化的部队
public function giveArmy($player);
//制造初始化的建筑
public function giveBuilding($player);
//初始化资源
public function giveSource($player);}

 

好了,到这里我们就该对这个接口来实现了,为了方便,我只选了两个种族,就只写这两个 种族的初始化了:
首先是精灵族:<?phpclass NighyElfInitial implements initialPlayer{
//制造初始化的部队