Service Provider Factory 本质都是 Provider 所调用的都是以下内部函数
只在于写法不同
以下为源码解析:
1 function provider(name, provider_) { 2 3 //如果 provider_ 未函数 ,调用 providerInjector.instantiate 创建实例 4 //在此将 provider_ 当作构造函数使用 5 if (isFunction(provider_) { 6 provider_ = providerInjector.instantiate(provider_); 7 } 8 9 // provider_ 必须定义一个 $get 否则抛出异常 10 if (!provider_.$get) { 11 throw Error('Provider ' + name + 'must define $get factory'); 12 } 13 14 //此前已将 provider 缓存, 在此返回 15 return providerCache[name + providerSuffix] = provider_; 16 }
Provider 模式是 ‘策略模式’ + ‘抽象工厂模式’ 的混合体 可成为 ‘供应者/提供者模式’