iOS工厂模式简记


之前看了 刘小壮 的【工厂模式三部曲】:简单工厂模式工厂模式抽象工厂模式。受益匪浅,强烈推荐去看一下这三篇原文!
下文是个人学习后的简记,用于之后的快速回顾。


1、简单工厂模式

抽象产品类:声明公共特性及属性;
具体产品子类:继承自抽象产品类,去实现具体的操作;
工厂类:根据外界需求,在工厂类中创建对应的产品子类实例对象,并回传给外界,是否创建由外界决定。

简单工厂模式.png

代码演示如下,略去部分代码:
简单工厂模式-手机.jpg

优点:简单。
缺点
1、创建产品子类的代码几乎相同,只是创建的具体对象不同,若产品子类过多,会有很多条件语句。
2、每次增删某个算法,都需操作工厂类,即,对扩展开放,对修改也开放,不符合 开放-封闭原则
优化
利用 runtime 的反射机制进行改造。符合面向对象编程的 开放-封闭原则

( 开放-封闭原则:对现有代码进行扩展时,不对原有代码进行修改的原则。)


2、工厂方法模式

抽象产品类:声明公共特性及属性;
具体产品子类:继承自抽象产品类,去实现具体的操作;
抽象工厂类:定义创建产品子类的接口,通过接口返回产品子类的对象。与应用程序无关,任何在模式中创建产品子类对象的工厂,都必须实现此接口。
具体工厂子类:继承自抽象工厂类,并重写父类的方法来创建对应的产品子类。

工厂方法模式.png

代码演示如下,略去部分代码:
工厂方法模式-手机.jpg

优点:更加灵活,增删某种运算,都不会对其他地方造成影响,更加符合 开放-封闭原则
缺点:新增一个抽象子类,意味着工厂子类要跟着成对增加,造成生成过多的类,模式的复杂度也随之增加。


3、抽象工厂模式

定义了每个系列的产品子类创建所需的方法,而无需指定它们具体的类型。也叫 Kit模式

抽象产品类:声明公共特性及属性;
具体产品子类:继承自抽象产品类,去实现具体的操作;
抽象工厂类:定义创建产品子类的接口,根据系列中不同类型的产品子类可能会有多种行为。
具体工厂子类:继承自抽象工厂类,根据当前具体产品子类对应的系列,重写父类的方法来创建对应的产品子类。

抽象工厂模式和工厂方法模式很相似,但是前者将抽象发挥到极致,是三种工厂模式中最抽象的一种设计模式。
工厂方法模式是针对单个类型的抽象类,而抽象工厂模式是针对具有相同结构的一系列类型的抽象类。


抽象工厂模式.png

代码演示如下,略去部分代码:


抽象工厂模式-手机.jpg

优点
1、强大灵活。
2、工厂子类对应的是多个系列的产品子类,可以统一控制多个系列的产品子类,更好的利用了工厂子类,适合更加复杂的业务需求。
3、完美符合 开放-封闭原则
缺点
1、模式比较庞大,所以需要在合适的业务场景使用,不然会适得其反。


4、总结

1、 三种工厂模式的共同点:继承自抽象类(抽象产品类/抽象工厂类)的子类(产品子类/工厂子类),都必须对抽象类定义的方法给出对应的实现,此模式就叫做 工厂模式

2、工厂模式的核心:抽象+多态。
抽象子类继承自抽象类,对抽象类中定义的方法和属性给出不同的实现方式,通过多态的方式进行方法实现和调用,构成了工厂模式的核心。

3、在工厂类中对开放封闭原则有着完美的体现,对扩展的开放以及对修改的封闭。
例如,最抽象的抽象工厂模式,
a、抽象工厂模式中增加新的系列(苹果系列),直接扩展一个工厂子类 (苹果工厂子类)及对应的产品子类(苹果Phone产品子类、苹果TV产品子类),对整个模式框架不会带来其他影响。
b、如果增加一个新的类型(如电脑),创建新的类型对应的类(电脑的抽象产品类,各系列的电脑产品子类),并对整个抽象工厂类(添加生产电脑)及其工厂子类(各系列对应实现的生产电脑)进行方法扩展。

4、在外界使用产品子类的功能时,不需要知道任何关于产品子类的特征,产品子类也不会出现在外界,外界只需要和抽象类打交道就可以。
工厂模式将产品子类的创建和实现分离,具体的创建操作由工厂类来进行,产品子类只需要关注业务即可,外界不需要知道产品子类实例化的过程。这种方式非常灵活并易于扩展,而且在大型项目中尤为明显,可以很好的避免代码量过多的问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容