如何选择合适的装饰器

时间:2015-01-18 19:35:32

标签: javascript angularjs angular-decorator

我创建了一个使用AI的游戏。这个AI'API必须使用Angular Service编写3种方法

这是一个简化的代码:

app.service('AI', [function(){
   return {
     offer: angular.noop,
     accept: angular.noop,
     reject: angular.noop
   }
}])

困难的部分是方法实施(以及AI如何反应)可以根据几个参数(国籍,年龄等)改变。

我想过使用角度装饰器,但我需要在几个装饰器之间进行选择。 我可以创建文件/实现:

  • 低于10.decorator.js
  • 低于20.decorator.js
  • 等...

但我怎么能说:

“我有一个18岁的玩家......加载少于20.decorator.js并申请装饰”

OR

“我有一个18岁的球员......使用这个装饰而不是这个”

要恢复:我想做一个条件装饰器(加载)。

经过一番搜索,我发现了一种方法:我可以返回原始服务而不是返回$ delegate,但我认为这不是一个很好的方式......

你有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

您是否考虑过使用工厂而非服务?

// teenagerAI and adultAI could be values, constants, factories...
app.factory('createAI', function (teenagerAI, adultAI) {
   return function (aiType) {
       switch (aiType) {
       case 'teenager':
           return teenagerAI;
       case 'adult':
           return adultAI;
       }
   };
});

然后你可以注入createAI并使用它:

createAI('adult');