前端代码常见的Provider究竟是什么

公益慈善北京中科在行动 http://weifang.dzwww.com/cj/201711/t20171127_16268082.htm

作者:神说要有光来源:神光的编程秘籍

不知道你有没有在某处见过xxProvider,Provider并不是23种经典设计模式之一,但是却应用特别多,可以算是一种比较新的模式。

Angular2中提供了创建对象的时候基于Provider

VSCode插件中有各种registerXxxProvider的api

React提供了Provider组件用于context数据的传递

还有很多别的地方也经常会见到Provider的概念,那么Provider究竟是什么呢?

本文就来回答下这几个问题:

provider是什么

provider创建对象和factory有什么区别

provider的具体应用

provider是什么

provider是提供者,从名字上和设计模式中创建对象的那些模式很像,比如工厂方法模式,但其实两者是有区别的。

工厂方法模式是用于创建不同的产品,通过继承的方式。

但有的时候创建的对象可能有别的来源,比如从别的地方获取的一个值,或者已经创建好的对象。这时候来源就不只有工厂了。

也就是说这时候要创建的对象有多种策略,工厂只是其中一种,策略+工厂/其他方式就是Provider。

provider被微软引入到了.net2.0,而且微软其他的一些技术产品也随处可以见provider,比如VSCode的xxxProvider、angular2的providers。

我们来看一些具体的应用。

provider的具体应用VSCode插件的provider系列api

VSCode插件中最常见的api就是registerXxxProvider,通过该api注册的Provider就是实现了provideXxx的对象。

比如智能补全就是注册一个CompletionProvider,然后根据document的内容,返回具体的CompletionItem的对象。

因为VSCode并不关心CompletionItem是怎么创建出来的,只知道通过这个provider可以拿到需要的


转载请注明:http://www.aierlanlan.com/grrz/6925.html