模板方法
模板方法
模板方法是一种行为设计模式,它在超类中定义了一个算法的框架,允许子类在不修改结构的情况下重写算法的特定步骤。
案例:策略游戏
// 抽象类定义了一个模版方法,其中通常会包含某个由抽象原语操作调用组成的算
// 法框架。具体子类会实现这些操作,但是不会对模版方法做出修改。
class GameAI is
// 模版方法定义了某个算法的框架。
method turn() is
collectResources()
buildStructures()
buildUnits()
attack()
// 某些步骤可在基类中直接实现。
method collectResources() is
foreach (s in this.builtStructures) do
s.collect()
// 某些可定义为抽象类型。
abstract method buildStructures()
abstract method buildUnits()
// 一个类可包含多个模版方法。
method attack() is
enemy = closestEnemy()
if (enemy == null)
sendScouts(map.center)
else
sendWarriors(enemy.position)
abstract method sendScouts(position)
abstract method sendWarriors(position)
// 具体类必须实现基类中的所有抽象操作,但是它们不能重写模版方法自身。
class OrcsAI extends GameAI is
method buildStructures() is
if (there are some resources) then
// 建造农场,接着是谷仓,然后是要塞。
method buildUnits() is
if (there are plenty of resources) then
if (there are no scouts)
// 建造苦工,将其加入侦查编组。
else
// 建造兽族步兵,将其加入战士编组。
// ...
method sendScouts(position) is
if (scouts.length > 0) then
// 将侦查编组送到指定位置。
method sendWarriors(position) is
if (warriors.length > 5) then
// 将战斗编组送到指定位置。
// 子类可以重写部分默认的操作。
class MonstersAI extends GameAI is
method collectResources() is
// 怪物不会采集资源。
method buildStructures() is
// 怪物不会建造建筑。
method buildUnits() is
// 怪物不会建造单位。