1. 介绍
组合模式是一种结构型设计模式,用于将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式允许客户端以统一的方式处理单个对象和组合对象。在本文中,我们将通过一个星际争霸游戏的实例来详细讲解组合模式的应用。
2. 游戏角色
我们先定义一些游戏中常见的角色,包括军队(Army)、士兵(Soldier)和坦克(Tank)。
abstract class Unit
{
abstract public function attack();
}
class Soldier extends Unit
{
public function attack()
{
echo "士兵进行攻击!";
}
}
class Tank extends Unit
{
public function attack()
{
echo "坦克进行攻击!";
}
}
class Army extends Unit
{
private $units = [];
public function addUnit(Unit $unit)
{
$this->units[] = $unit;
}
public function attack()
{
foreach ($this->units as $unit) {
$unit->attack();
echo "";
}
}
}
3. 组合模式的应用
在游戏中,军队是一个组合对象,士兵和坦克是叶子对象。军队可以包含多个士兵和坦克,并且可以将攻击命令传递给所有的成员。
下面我们来创建一个军队并添加士兵和坦克:
$army = new Army();
$army->addUnit(new Soldier);
$army->addUnit(new Soldier);
$army->addUnit(new Tank);
现在,我们可以通过调用军队的攻击方法来一次性命令所有的成员进行攻击:
$army->attack();
运行以上代码,输出结果如下:
士兵进行攻击!
士兵进行攻击!
坦克进行攻击!
可以看到,军队成功地将攻击命令传递给了所有的成员。
4. 总结
组合模式可以帮助我们将对象组织成树形结构,方便统一处理单个对象和组合对象。在星际争霸游戏中,我们使用组合模式来创建军队并管理军队中的成员。通过组合模式,我们可以一次性控制所有的成员,实现更加灵活和高效的游戏逻辑。
参考资料:
- Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides
- https://refactoring.guru/design-patterns/composite/php