iOS工厂模式的实质性总结
来源:互联网 发布:中美南海对峙 知乎 编辑:程序博客网 时间:2024/06/04 18:06
最近在公司搞分享活动,索性就分享了工厂模式这个看似大家都不重视的设计模式。实际上开发过程中用到的场景不少的。建议大家同时看着demo和文档分析了解工厂模式。这篇文章目的不是让你立马都可以使用这个模式,而是能够在思想上有一种工厂模式的意识。
初级认识
工厂模式一般理解就是减少new创建对象的方式,用接口的方式来返回一个对象,而new创建的方式被封装了。这个认识不足以理解到工厂方式的真正目的。
========================================================================
整体介绍
一: 工厂模式主要是为创建对象提供了接口。工厂模式一般分为三类:
1. 简单工厂模式(Simple Factory)
2. 工厂方法模式(Factory Method)
3. 抽象工厂模式(Abstract Factory)
这三种模式从上到下逐步抽象,并且更具一般性。 还有一种分类,就是将简单工厂模式看为工厂方法模式的一种特例,两个归为一类。两者皆可。
二: 什么样的情况下我们应该记得使用工厂模式呢?大体有两点:
1.在编码时不能预见需要创建哪种类的实例。
2.系统不应依赖于产品类实例如何被创建、组合和表达的细节
========================================================================
简单工厂模式
简单工厂模式的元素:
1. 工厂(Factory)角色:接受客户端的请求,通过请求负责创建相应的产品对象。
2. 抽象产品(Abstract Product)角色: 是工厂模式所创建对象的父类或是共同拥有的接口。可是抽象类或接口。
3. 具体产品(ConcreteProduct)对象:工厂模式所创建的对象都是这个角色的实例。
简单工厂模式的演变:
1.)当系统中只有唯一的产品时,可以省略抽象产品。这样,工厂角色与具体产品可以合并。
简单工厂模式的优缺点:
1.)工厂类含有必要的创建何种产品的逻辑,这样客户端只需要请求需要的产品,而不需要理会产品的实现细节。
2.)工厂类只有一个,它集中了所有产品创建的逻辑,它将是整个系统的瓶颈,同时造成系统难以拓展。
3.)简单工厂模式通常使用静态工厂方法,这使得工厂类无法由子类继承,这使得工厂角色无法形成基于继承的等级结构。
4.)简单工厂模式会包含过多的判断条件,维护起来不是特别方便。
工厂方法模式
工厂方法模式的元素:
creator(创建者)
product(产品)
工厂模式:在基类中定义一个用于创建对象的接口,让子类决定实例化哪一个类 ,工厂方法要解决的问题是对象的创建时机。它提供了一种扩展的策略,很好地符合了开放封闭原则。工厂方法也叫做虚构造器(Virtual Constructor)
工厂方法模式相比简单工厂模式:
1:工厂方法模式克服了简单工厂模式违背开放-封闭原则的缺点,保持了封装对象创建过程的优点。
2:要更换对象时,无论用简单工厂模式还是工厂方法模式,都可以不用做大的改动,就可以实现,降低客户程序与产品对象的耦合。
3:工厂方法模式是简单工厂模式的进一步抽象和推广,缺点是,每加一个产品,就要加一个产品工厂的类,增加了开发量。
=======================================================================
抽象工厂模式
一般来说,抽象工厂最简单形态也至少有4个元素:
* 客户端(client)
* 工厂(factory)
* 产品A(product A)
* 产品B(product B)
抽象工厂模式与工厂方法模式的联系与区别
联系: “抽象工厂”模式依赖于“工厂方法”模式。抽象工厂强调的是前面的动词“抽象”,
也就是说,将工厂方法模式中的工厂方法抽象出来的那个”动作或设计”就是“抽象工程”模式了。
---------------------------------
工厂方法模式(一个产品等级结构) :
一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式 (多个产品等级结构) :
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。 工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
==========================================================================
总结
以花园种菜为例
1.如果一个花园只种蔬菜类,那么就用简单工厂就可以了.
2.如果花园蔬菜品种繁多.得用工厂方法才可以,把共有的东西抽象出来.
3.如果要扩大后花园的规模,比如一个在北方,一个在南方,这样工厂方法就无法实现了,就应当用抽象工厂,把各种各样的植物,又组成一个后花园.
简单工厂是一个工厂只生产一类的产品,面对的是具体的类,工厂方法是可以生产不同的产品,把公共的方法抽象出来,然后进行创建各种各样的产品.
下载demo http://download.csdn.net/download/qq_25475307/9938697
- iOS工厂模式的实质性总结
- 实质性的东西
- 简单工厂、抽象工厂和工厂模式的总结
- 简单工厂模式,抽象工厂模式,反射工厂模式的代码总结
- 简单工厂模式,抽象工厂模式,反射工厂模式的代码总结
- 简单工厂模式,抽象工厂模式,反射工厂模式的代码总结
- 简单工厂模式,抽象工厂模式,反射工厂模式的代码总结
- 简单工厂模式,抽象工厂模式,反射工厂模式的代码总结
- iOS-工厂方法模式的运用
- 三种工厂模式的总结
- java设计模式-创建模式之 简单工厂,工厂方法和抽象工厂的区别总结
- 简单工厂、工厂模式、抽象工厂三种模式的对比与总结
- ios 简单工厂模式
- iOS 工厂模式
- iOS 工厂模式
- 工厂模式 iOS
- ios 工厂模式
- iOS 工厂模式
- JS的事件冒泡和事件捕获
- 关于利用Jsoup解析HTML中 ;变成非传统空格或乱码问题解决方法
- spring整合redis
- netty 点对点聊天程序
- SpringMvc相关整理
- iOS工厂模式的实质性总结
- 面试题 简单的字符串表达式四则运算(不考虑括号)
- shell相关
- 可以通过cout输出的几种opencv特有的数据类型
- hdu 6092 Rikka with Subset(多重背包)
- 接口
- Leetcode题解 53. Maximum Subarray 思路解析
- 算法模板之快速幂取模
- stm32 红外