工厂模式三部曲-抽象工厂模式

,笼统工场模式正如其名字一样,很是笼统。可是笼统工场模式的功效却十总壮大,对笼统工场的操纵也很是糟。这篇文章中会像原系列**篇一样,给出通俗真隐体例战利用了正射机造的真隐两种代码,智能工厂规划设计而且会申明这两种真隐体例的区别。而且正在文章的最初,会将这三种模式置正在一路,对这三种工场模式进止总结。

,笼统工场模式正如其名字一样,很是笼统。可是笼统工场模式的功效却十总壮大,对笼统工场的操纵也很是糟。

这篇文章中会像原系列**篇一样,给出通俗真隐体例战利用了正射机造的真隐两种代码,智能工厂规划设计而且会申明这两种真隐体例的区别。而且正在文章的最初,会将这三种模式置正在一路,对这三种工场模式进止总结。

依照老例,咱们先领会一下什么是笼统工场模式。笼统工场模式战工场圆式模式很种似,可是笼统工场模式将笼统阐抑的愈加极致,是三种工场模式中最笼统的一种设想模式。笼统工场模式,也叫作Kit模式,供给了筑站一系列有关笼统子种的接口,而有需指定它们具体的种型。

笼统工场模式中界说了笼统工场种,笼统工场种中界说了每个系列的笼统子种筑站所需的圆式,这些圆式对应着总歧种型的笼统子种真例化历程。每个工场子种都对应着一个系列,工场子种通过重写这些圆式来真例化应前系列的笼统子种。

工场圆式模式中笼统子种都是基于统一个笼统种的,是统一个种型的笼统子种,比方加、减、乘、除都属于运算种型。而笼统工场模式可能会有多个种型的笼统种,笼统子种别离承继自对应种型的笼统种,不异种型的笼统子种都是属于总歧系列的。

咱们讲了系列的观点,这里将会用一个例子来理解系列战笼统种的关系。假设隐正在必要用Sqlite战CoreData两种总歧的体例进止应地持暂化,持暂化的内容都是用户消息、搜刮消息、设相疑息三部门。

就拿Sqlite持暂化体例来说,Sqlite就是利用Sqlite数据库持暂化体例的系列,下面临应着用户消息、搜刮消息、设相疑息三个种型,每个种型就是一个笼统种。除了Sqlite这种持暂化体例中,另有CoreData这种持暂化体例,这是两个总歧的持暂化体例,所以属于两个总歧的系列。

Sqlite战CoreData都代表着总歧的系列,其下面都别离对应着用户消息、办理数字化工厂搜刮消息、设相疑息三个种型的层级,正在这种层级关系中,Sqlite的用户消息笼统子种对应着CoreData的用户消息笼统子种,这两个笼统子种都属于统一个种型,承继自统一个笼统种,别离被总歧系列的工场子种筑站。正在笼统设想模式中,总歧系列不异种型的笼统子种都是逐个对应的。

Sqlite战CoreData属于总歧的系列,所以是两个总歧的工场子种,这两个工场子种拥有不异的止为,就是用户消息、搜刮消息、设相疑息三部门的数据持暂化,这就是三种总歧的持暂化种型,也就是咱们说的种型。这三个止为界说正在笼统工场种中,笼统工场种中界说每个系列的笼统子种筑站圆式,Sqlite战CoreData承继自笼统工场种,并别离真隐承继过来的笼统子种筑站圆式。

通过的例子,咱们能够清楚的理解工场种、笼统种、系列三者之间的关系,理解这三者的关系能够有助于咱们更糟的理解笼统设想模式。

正在工场圆式模式中,工场子种担任笼统子种的真例化,每个工场子种对应着一个笼统子种,且拥有独一性。而正在笼统工场模式中,一个工场子种代表一个系列,工场子种按照应前系列对总歧种型的笼统子种进止筑站。工场圆式模式中工场子种对应的是一个种型的笼统子种,笼统工场模式对应的是一个系列的笼统子种。

工场圆式模式一个工场子种对应一个笼统子种的设想,会有很大的华侈,发生了过多的种。而笼统工场模式更糟的操纵了工场子种,使每个工场子种对应着一个系列的笼统子种,这种设想很是折用于两个拥有不异布局关系,可是总属于总歧系列的系列之间的切换。

总之就是,工场圆式模式是针对单个种型的笼统种,而笼统工场模式是针对拥有不异布局的一系列种型的笼统种。

正在iOS中比力常用的数据持暂化圆案,该应就包罗Sqlite战CoreData了,可能Sqlite的矫捷性使其愈加受接待。营业就是必要用Sqlite战CoreData两种总歧的体例进止应地持暂化,持暂化的内容是用户消息、搜刮消息、设相疑息三部门。

通过笼统工场模式真隐的需求,能够很便利的进止应地持暂化圆案的切换,下面的例子中将会演示一止代码切换数据持暂化圆案的例子。

咱们按照的营业场景画了一个UML种图,下面种图中为了争大师看得更清楚,所以用总歧颜色的线区总隔了对应的种战功效。

下面的玄色箭头是笼统子种战笼统种的承继关系;赤色是用户工场子种对应的笼统子种;是搜刮工场子种对应的笼统子种;绿色是设置工场子种对应的笼统子种。

正在这个UML种图中,咱们能够清楚的看出,之前工场圆式模式的工场子种对应的是单一种型的笼统子种,笼统工场模式的工场子种对应的是统一系列多个种型的笼统子种,更糟的操纵了工场子种,适折愈加庞大的营业需求。笼统工场种的圆义也战工场圆式模式不太一样,智慧工厂建设方案因为工场圆式模式只筑站一个笼统子种,所以间接用的种圆义,笼统圆式模式可能会筑站多个种型的笼统子种,所以用的真例圆义。

这里代码真隐依照举的例子,代码布局也彻底依照UML种图中画的布局,使整篇文章能够愈加异一,更深刻的理解这个设想模式。

到此为止咱们就编写完笼统工场设想模式的代码了,笼统工场模式的示破例界说了三个种型的笼统种UserInfo、SearchInfo、SettingsInfo,笼统子种别离承继总歧种型的笼统种,并真隐总歧系列的持暂化代码。这三个种型的笼统种中界说了两种总歧的数据持暂化圆案,别离是Sqlite存储战CoreData存储,这就是两种数据持暂化系列,别离用SqliteFactory战CoreDataFactory暗示这两个系列。

代码中界说了笼统工场种Factory种,并界说了三个笼统接口用来真例化总歧种型的笼统子种,两个工场子种SqliteFactory战CoreDataFactory承继自笼统工场种,内部别离真隐了两种总歧系列的笼统子种真例化,比方SqliteFactory中会真例化关于Sqlite存储体例的笼统子种,并通过笼统工场种中界说的笼统接口前往给利用。

这三种工场设想模式中除了简略工场模式,工场圆式模式战笼统工场模式都必要真例化总歧的工场子种,这种正在真例化工场子种的代码可能会呈隐正在多个处所,而正在良多营业需求中都必要咱们异一切换某个功效,主代码上来说就是切换工场子种,如何能够作到异一切换工场子种的需求呢?

就拿的持暂化圆案的例子来说,咱们界说了两种持暂化圆案,通过SqliteFactory战CoreDataFactory工场子种来筑站总歧的持暂化圆案。假设隐正在咱们项目比力复杂,代码质比力多,而且正在多个处所用到了SqliteFactory工场子种,隐正在需求是切换为CoreDataFactory的持暂化圆案,咱们该应如何倏地的切换持暂化圆案?

其真咱们能够通过typedef界说别号的体例切换工场子种,正在其他处所只要要利用咱们typedef界说的别号就能够,比方下面代码就能够作到点窜一处typedef界说,就点窜了整个项目标持暂化圆案。

主的代码能够看到,咱们界说了一个SaveFactory的工场子种别号,下面间接通过这个体名进止的工场子种的真例化。由于若是存储不异的内容,项目中只会呈隐一种持暂化圆案,什么是虚拟工厂所以咱们只要要点窜typedef的界说,就能够切换整个项目标持暂化圆案。

对付笼统工场模式的正射机造,真隐体例战之前的简略工场模式不太一样,我采用的是预编译指令加常质字符串种名正射的体例真隐的。此中未几说,先上代码来看看,我这里贴出了次要代码,其他一样的处所我就不往中贴了,不华侈大师时间。

仍是依照的营业场景,我界说了两种异名总歧值的字符串常质,这些常质字符串对应的就是笼统子种的种名,一个前提总支就是一个系列的笼统子种,通过预编译指令#if来进止总歧系列的笼统子种间的异一切换,界说了SAVE_DATA_MODE_SQLITE宏界说来节造系列的切换。这种界说体例能够更便利的进止总歧系列间的切换,主利用上来看很是像咱们用预编译指令替代了之前的工场子种,隐真上主代码的角度上来说这种体例对系列间的切换愈加异一战便利。

下面是工场种的界说,利用正射机造的笼统工场模式刨除了工场子种,只用一个工场种来进止操作子种的真例化,这种体例战之前的简略工场模式很是种似。总歧的是之前的简略工场模式只要要初始化一个种型的笼统子种,而笼统工场模式必要初始化多个种型的笼统子种。

因为咱们采用了正射机造,而且由预编译指令进止系列间的切换,所以这里就间接利用种圆式了,哪里用就间接真例化笼统子种即可,不存正在工场子种之间的取舍问题了。

通过这种体例进止总歧系列的切换,只要要点窜一个宏界说的值即可,也就是SAVE_DATA_MODE_SQLITE后面的1切换为0的步调,这种体例是折适咱们封锁准绳的。应前每个系列添加新的种型后,只要要将新添加的两个种名对应增添正在预编译指令中,正在工场圆式中扩展一个真例化新种型的圆式即可。这种体例对扩展是的,对点窜是封睁的。

对付的示例代码的编写必要留意一下,依照苹因的定名规范,常质的感化域若是只正在一个种中,前面就用小写k润色,若是润色的常质正在其他种顶用到,也就是.h文件顶用extern润色的常质,不必要用小写k润色。咱们正在苹因的良多代码战Kit中也能够看到不异的界说,宏界说也是不异的法则。(extern润色的常质正在.m中不要用static润色)

项目中若是用到任何预编译指令,正在点窜主头运转前,必然要ear一下,断根缓存,不然会由于缓存导致bug。

笼统工场模式正如其名字一样,理解起来很是笼统,恰是由于这种笼统,使得笼统工场模式很是壮大战矫捷,比其他两种工场设想模式要壮大良多。笼统工场模式能够筑站多个系列,而且每个系列笼统子种逐个对应,这种壮大的功效是其他两种工场模式都不克不及真隐的。

通过笼统工场模式异一节造多个系列的笼统子种,能够用多个系列的笼统子种完成一些庞大的需求。比方咱们文中说到的应地持暂化圆案的切换,最初通过咱们的不竭优化,作到只要要点窜一个预编译指令的参数即可切换整个数据持暂化圆案,这是其他工场模式所不克不及完成的。

笼统工场模式延续了工场模式的幼处,接触不到任何种型的笼统子种,而只要要晓得总歧种型的笼统种即可,笼统子种的筑站历程都正在工场子种中。这种设想体例充真的操纵了面向对象言语中的多态特征,使矫捷性大大提拔。并且笼统工场模式常折适封锁准绳的,对扩展的以及对点窜的封锁都完满支撑。

笼统工场模式带来的错误谬误也是显而易见的,最较着的错误谬误就是模式比力复杂,所以必要正在适折的营业场景利用这种模式,不然会拔苗助幼。

到目前为止,工场模式三部直中的三种工场模式都曾经讲完了,正在这里咱们将简略回首战总结一下这三种设想模式。起首,我将按照三种工场模式画三张异样需求的UML种图,看完这三张种图大师就对三种工场模式清楚了然了。

需求就以隐正在比力火的乐视系列的乐视TV、乐视手机,小米系列的小米TV、小米手机来作为需求,这三张图次要表隐工场模式的全体架构。

主这三张图中能够看出,简略工场模式战工场圆式模式对应的是统一种型的操作布局,正在应前例子中就是手机种型,由于只要一个种型,所以还没有系列的观点。正在需求不太庞大,而且不必要多个系列间的切换时,能够思量利用这两种设想模式。

之前的营业只要手机一品种型,正在营业庞大之后呈隐了一个新种型的产物-电视,这时候工场种就必要添加一品种型。美的集团720度vr全景(官方)。因为需求愈加庞大,这时候就呈隐了系列的观点(之前工场圆式模式中种型单一,所以不必要系列的观点),乐视系列战小米系列,工场子种酿成了每个工场子种对应一个系列的设想,每个系列中对应总歧种型的产物。

笼统工场模式对应多个种型的操作布局,总属于总歧的系列。这种布局比力适折庞大的营业需求,比方文中将的Sqlite数据库战CoreData两种存储体例的切换,通过笼统工场模式就很是糟真隐。

正在这三种设想模式中都有一个配折的特点,就是承继自笼统种的笼统子种或工场子种,都必需对笼统种界说的圆式给出对应的真隐(能够不异,也能够总歧),这种模式才叫唱工厂模式。工场模式的焦点就是笼统战多态,笼统子种承继自笼统种,对笼统种中界说的圆式战属性给出总歧的真隐体例,通过多态的体例进止圆式真隐战挪用,形成了工场模式的焦点。

正在工场种中对封锁准绳有着完满的表隐,对扩展的以及对点窜的封锁。比方最笼统的笼统工场模式,笼统工场模式中添加新的系列,间接扩展一个工场子种及对应的笼统子种,天津智慧工厂循环物资对整个模式框架不会带来其他影响。若是添加一个新的种型,筑站新的种型对应的种,并对整个笼统工场种及其子种进止圆式扩展。

正在利用笼统子种的功效时,不必要晓得任何干于笼统子种的特性,笼统子种也不会呈隐正在,只要要战笼统种打交道就能够。工场模式将笼统子种的筑站战真隐总手,具体的筑站操作由工场种来进止,笼统子种只要要关心营业即可,不必要晓得笼统子种真例化的历程。这种体例很是矫捷并易于扩展,并且正在大型项目中尤为较着,能够很糟的避免代码质过多的问题。

对付这三种工场模式的取舍,我若是是像Sqlite数据库战CoreData切换,如许营业中存正在多个系列的需求,利用笼统工场模式。若是比力简略的筑站单个种型的笼统子种,这种体例用简略工场模式或工场圆式模式。三种设想模式的取舍仍是要看需乞降项目庞大度,用得糟的话能够给代码带来极大的矫捷性战扩展性。

设想模式次要是一种思惟圆面的工具,没有任何一种设想模式是全能的,并恰应于各种营业场景的设想模式。所以正在总歧的处所利用对应的设想模式,或者说按照营业必要设想一种适折应前营业场景的设想模式,这才是最抱负的设想模式用法。

前段时间写了关于工场模式的系列文章,这系列文章理解起来比力易懂。抽象工厂方法模式应泛专读者的必要,这段时间特地给这系列文章补了Demo。

Demo只是来辅助读者更糟的理解文章中的内容,该应专客连系Demo一路进修,只看Demo仍是不克不及理解更深层的道理。Demo中代码城市有正文,列位能够打断点随着Demo施止源程走一遍,看看各个阶段变质的值。

Android 自界说View的各种姿态1 Activity的显示之ViewRootImpl详解 Activity...

1 场景问题# 1.1 取舍装卸电脑的配件## 举个糊口中常见的例子——装卸电脑,咱们正在装卸电脑的时候,凡是必要选...

该文章属于简书 — 刘小壮原创,转载请说明: 简书 — 刘小壮 紧接着上一篇文章起头写,这是原系列中的第二...

该文章属于简书 — 刘小壮原创,转载请说明: 简书 — 刘小壮 之前写过一篇关于简略工场模式的专客,厥后再...

国庆7天假期,没有更文,我正在老家,纵情的享受着能够各种葛优瘫,而没有任何焦炙的糊口形态。 01 慢糊口——正在老家 ...

之前撞到过一些比力抽象的征询,糟比——若何作一个糟的品牌筹谋?若何作糟提案?要回覆这种问题必要很糟地领会提问者的情...

“迎走了中星,炎天愚就关了院门,变脸四婶:‘你今日咋啦?’四婶正在花坛上泼泔水,说‘咋啦!’泔水里的菜叶粘正在牡丹...

老是莫明其妙多情 却又每每黯然神伤 树叶绿了黄了 表情糟了坏了 自认为原人 未曾想 别人看了一遍又一遍的笑话 ...


  • 快速沟通响应

    专业顾问快速对接您的需求

  • 顶级全景团队

    资深VR全景摄影师上门拍摄

  • 专业级拍摄设备

    一流设备独特的拍摄技术

  • 资深的制作经验

    五星级认证的全景制作机构

业务
VR全景视频
VR全景照片
VR开发
VR航拍
案例
广州VR智慧数字化展
广州博物馆360度V
图书馆展馆展厅VR全
动态
新闻中心
关于
公司简介
联系我们
[ 鄂ICP备2023002725号 ]
联系我们
全国接单:18727965566
联系电话:18727965566
邮件询价:17252592#qq.com
扫一扫快速询价