【5min+】 设计模式的迷惑?Provider vs Factory
系列介绍
【五分钟的dotnet】是一个利用您的碎片化时间来学习和丰富.net知识的博文系列。它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net知识等等。
5min+不是超过5分钟的意思,"+"是知识的增加。so,它是让您花费5分钟以下的时间来提升您的知识储备量。
正文
一说起设计模式,大家应该都不会太陌生。毕竟在面向对象的世界中,我们需要用到各种奇技淫巧的手段来构建我们的应用,而设计模式就是这些技巧的根本。如果您曾参与过计算机职业资格考试(俗称软考),就会发现:无论是初级、中级还是高级,都会有关于设计模式的考题,而且分值比重还很大。这也侧面说明了,学习设计模式的重要性。
如果一谈起设计模式,立马浮现在您脑中的模式有哪些呢:“单例”、“迭代器”、“外观”、“桥接”………… 然而,就在上周的时候,我突然遇到了这么一个问题:当我想为创建一个对象进行抽象时,我不知道如何命名该创建类的名称了。 您可能会说“这还不简单,要创建肯定是属于创建类型,那很大几率就是“XXFactory”呀,就是所谓的工厂模式”。是的,我最初的时候也是这么想的,但是我心里又出现了另外的一个单词:“Provider”。
Provider? 可能有些小伙伴会有一些陌生,因为它并没有出现在GOF所提出的24个模式中。而它又是什么东西呢? 经过我一番查找,发现它是由微软在“.NET 1.1 framework”提出的一种模式。当然,距离.NET 1.1 framework发布至今已经过了很多年了。也正是经历了这么多年的成长,所以微软的许多代码中您都会发现“Provider”的身影。 比如咱们在AspNetCore中再熟悉不过的Logger,它就是由“ILoggerProvider”来创建的,还有依赖注入的“IServiceProvider”等等。
疑惑
可能也是因为看多了“Provider”这个单词,所以才出现了我上面的纠结。但是,我突然想了想,既然都是向外界提供一个结果,那么Provider和Factory到底有什么不同呢?
于是乎,我再次尝试了 "百度不行就谷歌" 的程序员大法进行一波骚操作。但是看了结果之后我的心是拔凉拔凉啊:
【5min+】 设计模式的迷惑?Provider vs Factory的更多相关文章
- 打造属于你的提供者(Provider = Strategy + Factory Method) 设计模式 - Provider Pattern(提供者模式)
打造属于你的提供者(Provider = Strategy + Factory Method) 1.1.1 摘要 在日常系统设计中,我们也许听说过提供者模式,甚至几乎每天都在使用它,在.NET F ...
- angularjs中provider,factory,service的区别和用法
angularjs中provider,factory,service的区别和用法 都能提供service,但是又有差别 service 第一次被注入时实例化,只实例化一次,整个应用的生命周期中是个单例 ...
- 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern)
原文:乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pa ...
- Java设计模式之工厂模式(Factory模式)介绍(转载)
原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工 ...
- Java设计模式之工厂模式(Factory)
前言: 前面学习了建造者设计模式,接下来学习一下Retrofit中使用的另外一个设计模式,工厂设计模式!!!里面采用工厂模式使得数据转换得到完全解耦,工厂模式的好处用到了极致,如此好的设计模式我们怎能 ...
- 设计模式——抽象工厂(Abstract Factory)
Abstract Factory 抽象工厂模式(创建型模式): new的问题:实现依赖,不能应变应对“具体实例化类型”的变化. 解决思路:--封装变化点:哪里变化,封装哪里 - - ...
- 浅谈C++设计模式之工厂方法(Factory Method)
为什么要用设计模式?根本原因是为了代码复用,增加可维护性. 面向对象设计坚持的原则:开闭原则(Open Closed Principle,OCP).里氏代换原则(Liskov Substitution ...
- 深入浅出设计模式——工厂方法模式(Factory Method)
介绍在简单工厂模式中,我们提到,工厂方法模式是简单工厂模式的一个延伸,它属于Gof23中设计模式的创建型设计模式.它解决的仍然是软件设计中与创建对象有关的问题.它可以更好的处理客户的需求变化. 引入我 ...
- 设计模式之美:Abstract Factory(抽象工厂)
索引 别名 意图 结构 参与者 适用性 缺点 效果 相关模式 命名约定 实现 实现方式(一):使用 Factory Method 来实现 Abstract Factory. 实现方式(二):使用 Pr ...
随机推荐
- django.db.migrations.exceptions.MigrationSchemaMissing和raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
1.使用Python3.7 + Django2.2 + MySQL 5.5 在执行(python manage.py migrate)命令时出现错误django.db.migrations.excep ...
- vue引用外部JS的两种种方案
前言 肯定会遇到没有npm化的库 自己写的js 方法 在Vue中该怎么引用呢 第一种 如果库是es6写的 就可以用import 引入 比如我自己写的http 封装接口的方法 就可以这样子导入哦 第二种 ...
- flash-session
作用:更改session存储的位置 1.session默认存放在浏览器的cookie中 源码 wsgi->app.__call__->wsgi_app->push->self. ...
- 玩转Django2.0---Django笔记建站基础十一(二)((音乐网站开发))
11.5 歌曲排行榜 歌曲排行榜是通过首页的导航链接进入的,按照歌曲的播放次数进行降序显示.从排行榜页面的设计图可以看到,网页实现三个功能:网页顶部搜索.歌曲分类筛选和歌曲信息列表,其说明如下: 1. ...
- Django报错Watching for file changes with StatReloader
Django项目运行时出现:Watching for file changes with StatReloader错误 原因:环境里的django或者python的版本有问题 解决方案:升级或者降级D ...
- Docker 使用笔记-常用基础命令
常用基础命令 环境:Linux Ubuntu 1.查看docker信息 docker version | docker info 2.启动docker服务 sudo systemctl start d ...
- js原型和原型链的简单理解
构造函数创建对象: function Person() { } var person = new Person(); person.name = 'Tian'; console.log(person. ...
- WTL Picture Control显示图片
1.在对话框上新建一个Picture Control ID为:IDC_STATIC_IMG 2.添加图片资源ID:IDB_BITMAP1(选中Bitmap点击导入,选择bmp图片资源) 实现: CWi ...
- Web框架之Gin介绍及使用
Gin是一个用Go语言编写的web框架.它是一个类似于martini但拥有更好性能的API框架, 由于使用了httprouter,速度提高了近40倍. 如果你是性能和高效的追求者, 你会爱上Gin. ...
- 牛客练习赛39 C 流星雨 (概率dp)
题意: 现在一共有n天,第i天如果有流星雨的话,会有wi颗流星雨. 第1天有流星雨的概率是p1. 如果第i−1 (i≥2)天有流星雨,第i天有流星雨的可能性是pi+P,否则是pi. 求n天后,流星雨颗 ...