Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何选择合适的装饰师_Javascript_Angularjs_Angular Decorator - Fatal编程技术网

Javascript 如何选择合适的装饰师

Javascript 如何选择合适的装饰师,javascript,angularjs,angular-decorator,Javascript,Angularjs,Angular Decorator,我正在创建一个使用AI的游戏。这个AI'API在Angular服务中有3个方法 以下是简化代码的示例: app.service('AI', [function(){ return { offer: angular.noop, accept: angular.noop, reject: angular.noop } }]) 困难的部分是,方法实现(以及AI如何反应)可能会根据几个参数(国籍、年龄等)发生变化 我曾考虑过使用角度装饰器,但我需要在几个装饰器

我正在创建一个使用AI的游戏。这个AI'API在Angular服务中有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并应用decorator”

“我有一个18岁的球员…用这个来代替这个”

继续:我想做一个条件装饰(加载)

经过一番搜索,我找到了一种方法:不用返回$delegate,我可以返回原始服务,但我认为这不是一种很好的方法


您有更好的解决方案吗?

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

// 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');

我考虑过,但我可能会有二十个或更多不同的人工智能,加上二十+否认不是最好的方法…你可以考虑使用<代码>注射器。代码>在您的工厂中。最终使用了一个工厂+$injector.get(foo);。Thks。