当我第一次发现策略模式时,我为它和我的程序所提供的看似无限的可能性感到惊讶。我可以更好地封装模型的行为,甚至可以即时交换这种行为。但是,该策略还可以用于向包含的对象(在父类(super class)中声明的数据)提供特征和有效负载。生活很好。
class MyMonsterAI { float const see_radius_; virtual void attack () = 0; /* .. */ };
class ElveAI { ElveAI() : see_radius_(150.0f) {} /* ... */ };
class CycloneAI { CycloneAI() : see_radius_(50.0f) {} /* ... */ };
class Monster { MyMonsterAI* ai_; };
随之而来的是Policy模式,它将为我提供更大的灵活性,以便为包含的类提供参数-完整的类,尽管我喜欢,但还是可以随便装备,尽管可以动态交换行为...这并不是一件容易的事(除非该策略的一部分制定策略!)。
class MyMonsterTrait { typedef typename ElveAI AI; };
template< class MonsterTrait >
class Monster : public MonsterTrait::AI
{
void idle (void) { attack(); }
};
这两种模式对我来说似乎都很强大,我喜欢在不同的情况下同时使用两者。但我不确定在某些情况下是否有特定/典型/更实用的应用程序。
我想知道:您在哪里使用策略,在哪里使用策略?哪个更适合?
最佳答案
策略主要在编译时设置,而策略则在运行时设置。此外,策略通常是C++概念,并且仅适用于少数其他语言(例如D),而策略模式可用于许多(大多数?)面向对象的语言,以及将函数视为一流公民的语言,例如python 。
话虽如此:
-亚当