Javascript (另一)要求澄清“的含义”;“单身人士”;棱角分明

Javascript (另一)要求澄清“的含义”;“单身人士”;棱角分明,javascript,angularjs,singleton,Javascript,Angularjs,Singleton,我正在学习angular,尝试不同的服务/工厂使用方式,并试图让我的头脑围绕着他们是“单身”的独特感觉 我有一个API服务,它公开域模型并包装从我的REST服务器检索它们的功能。这个服务可以很容易地理解为经典意义上的单例:我希望在我的应用程序中共享一个实例,其状态可以被许多不同的控制器观察到,从而使这些控制器能够“同步”通过服务的管道彼此保持同步:控制器不是通过直接了解(并因此耦合)彼此来保持同步,而是通过了解这一公共服务来保持同步。(附带问题:这是对服务角色的正确描述吗?) 这是一个用例,其中

我正在学习angular,尝试不同的服务/工厂使用方式,并试图让我的头脑围绕着他们是“单身”的独特感觉

我有一个
API
服务,它公开域模型并包装从我的REST服务器检索它们的功能。这个服务可以很容易地理解为经典意义上的单例:我希望在我的应用程序中共享一个实例,其状态可以被许多不同的控制器观察到,从而使这些控制器能够“同步”通过服务的管道彼此保持同步:控制器不是通过直接了解(并因此耦合)彼此来保持同步,而是通过了解这一公共服务来保持同步。(附带问题:这是对服务角色的正确描述吗?)

这是一个用例,其中一个单例服务非常适合。但是:

API
服务返回的域对象之一称为
thread
,它本质上是
链接列表的包装器。除了点列表之外,线程还有一个
currentPoint
变量和一个
next()
函数,该函数从列表中弹出下一个值,使其成为
currentPoint

我的UI以两种不同的方式同时可视化线程——在两个单独的元素中使用它们自己的控制器和指令。这些元素中的每一个都包含一个按钮,单击该按钮时调用
nextPoint()
,从而更改线程的状态。当在一个元素中按下此按钮时,两个元素中的线程状态都需要更新——因此,这里我们又遇到了一种情况,即服务似乎很理想

但是,在任何给定的时间,都可能会显示任意数量的线程,每个线程都应该是独立的,并且彼此不知道——这与(我理解为)传统意义上的“单线程”相冲突

在英语中有这样一个词吗?

我已经对此进行了充分的实验/研究,知道使用
factory
s创建这些“非单例单例”肯定是有可能的,但肯定有比“非单例单例”更好的术语-我两次键入都感到畏缩

第二,什么是最佳的实施方法?下面所示的策略(我在一个github问题中发现)可以被视为最佳实践吗

myApp.factory('myServiceProvider',function(){
    var serviceProvider=function(){};
    serviceProvider.prototype.foo=function(){};

    var service = {
        getInstance:function(){ return new serviceProvider(); }
    }

    return service;
});

//Singleton Services
myApp.factory('myService',['myServiceProvider',function(myServiceProvider){
    return myServiceProvider.getInstance();
}]);

//Where non-singletons are required
function myController(myServiceProvider){
    var instance_a=myServiceProvider.getInstance();
    var instance_b=myServiceProvider.getInstance();
};

//Where singleton service is required
function myOtherController(myService){
    myService.foo();
};

棱角分明的单身汉并不完全是经典。角度中的单态基本上是持有单一状态的对象的一个实例。该状态可以通过允许值共享的服务进行数据绑定。这意味着您可以拥有一个服务属性,该属性在应用程序的所有使用中绑定;一个变化将反映在所有地方。在应用程序的整个生命周期中,单身都会持续存在。如果应用程序被刷新,singleton将丢失值,直到应用程序通过用户交互或存储检索再次设置为止

我喜欢你用的图案。我也倾向于使用它。下面是我最近制作的一个与您的服务类似的web存储服务的示例

我希望这会有所帮助,并且可以继续此对话:)

谢谢


Jordan

我发现EventEmitter擅长将需要以协调但独立的方式对更改/事件做出反应的不同代码片段粘合在一起。angular具有$scope.on/emit,因此它是您已经拥有的一个选项。您只需在某些内容发生更改时发出,并在需要更改通知的位置订阅。这两个代码片段不以其他方式连接。EE是典型的经典意义上的单身。只是我的$0.02…嘿-想感谢你的回答和链接,我很感激。将在明天有更多时间时接受/回复:)