星际争霸之php迭代器模式
Jun 07, 2016 pm 05:23 PM星际的任务关一般会有这样的设定:一开始电脑的农民不采矿,如果战斗打响,或者玩家造出第一个兵,电脑的农民开始采矿。
我们自然会想到把电脑的农民放到一个数组,然后一旦玩家造兵,或者战斗打响,把这个数组循环,让里面的农民采矿。
但问题出来了,由于每个任务的设定会有所不同,我们总希望任务的开发比较方便,而且容易修改(一旦发现bug)。
何况有些任务不是农民采矿,而是电脑出兵攻击玩家。
那么过多的固定细节(用数组存放)以及依赖细节(对数组循环),将使得代码的关联性变得很高。
待解决的问题:把循环处理的事务变的抽象。
思路:关键是对农民的循环,用数组处理只是一种方式,我们考虑抽象的数组,而不是具体的数组。
迭代器(Iterator)模式示例:
<?php //聚集接口,意思是所有电脑的农民都聚集在这个类里面 interface IAggregate { //让具体的聚集类实现的,获取使用的迭代器的方法 public function createIterator(); } //具体的聚集类 class ConcreteAggregate implements IAggregate { //存放农民的数组,注意可以不用数组来处理,看完所有的代码就知道了 public $workers; //增加元素的方法,这里元素就是农民 public function addElement($element) { $this->workers[] = $element; } //获取元素的方法 public function getAt($index) { return $this->workers[$index]; } //获取元素的数量的方法 public function getLength() { return count($this->workers); } //获取迭代器的方法 public function createIterator() { return new ConcreteIterator($this); } } //迭代器接口,注意php5有个内置的接口叫Iterator,所以这里我们改成IIterator interface IIterator { //是否元素循环完毕 public function hasNext(); //返回下一个元素,并将指针加1 public function next(); } //具体的迭代器类 class ConcreteIterator implements IIterator { //要迭代的集合 public $collection; //指针 public $index; //构造函数,确定迭代的集合,并将指针置零 public function

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Lösung: Ihre Organisation verlangt von Ihnen, dass Sie Ihre PIN ändern

So passen Sie die Fensterrahmeneinstellungen unter Windows 11 an: Farbe und Größe ändern

Wie ändere ich die Farbe der Titelleiste unter Windows 11?

So aktivieren oder deaktivieren Sie die Vorschau von Miniaturansichten in der Taskleiste unter Windows 11

OOBELANGUAGE-Fehlerprobleme bei der Reparatur von Windows 11/10

Anleitung zur Anzeigeskalierung unter Windows 11

10 Möglichkeiten, die Helligkeit unter Windows 11 anzupassen

Wie deaktiviere ich die Authentifizierung beim privaten Surfen auf dem iPhone in Safari?
