作者:神说要有光来源:神光的编程秘籍
不知道你有没有在某处见过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可以拿到需要的