ios设计模式之简单工厂模式
最近一直在阅读OC编程之道(ios设计模式解析)一书(往期文章中我也将电子版的下载链接分享了出来)。其中包括23种设计模式和7种设计准则,如下图(此图为网络图片):设计模式.png
- 在这里不过多的详情设计模式和设计准则的问题了,感兴趣的同学可以自行去查阅资料,我在这里只详情一种设计模式及其代码,那就是简单工厂模式。
- 何时使用工厂方法
1、编译时无法精确预期要创立的对象的类;
2、类想让其子类决定在运行时创立什么;
3、类有若干辅助类为其子类,而你想将返回哪个子类这一信息局部化; - 在Cocoa Touch框架中应用的工厂方法
工厂方法在Cocoa Touch框架中几乎随处可见,常见的两步对象创立法[[SomeClass alloc] init]
。有时,我们已经注意到有少量便利方法返回类的实例。例如,NSNumber
有很多numberWith *
方法,其中两个是numberWithBool:
和numberWithChar:
。他们是类方法,也就是说我们向NSNumber
发送[NSNumber numberWithBool:YES]
,以取得与传入参数同类型的各种NSNumber
实例。与如何创立NSNumber
的具体子类型的实例有关的所有细节,都由NSNumber
的类工厂方法负责。[NSNumber numberWithBool:YES]
的情况是,方法接受值YES
,并把NSNumber
的内部子类的一个实例初始化,让它能够反映传入的值YES
。
我们曾提到有个工厂方法模式的变体,笼统类用它生成具体子类。NSNumber
中的这些numberWith *
方法是这个变体的一个例子。它们不是用来被NSNumber
的私有子类重载的,而是NSNumber
创立合适对象的便利方式。 - 简单的代码逻辑,提现一下工程方法的模式
文章中我拿生活中日常饮用的饮料来做例子,我们首先会有一个父类,名字是:Drinks
,代表饮料。还有三个继承Drinks
的子类,名字分别为:可乐CocaCola
芬达Fender
矿泉水MineralWater
。而后我们会有一个专门的工厂类DrinksFactory
来管理生产何种饮料,DrinksFactory
通过一个枚举和一个方法来生产。 - 下面我将代码呈现给大家(gitHub工程地址: TianTeng6661/SimpleFactory.git,喜欢的给个星,谢谢)
1、Drinks
类
import UIKitclass Drinks: NSObject { func drinksColor(){ NSLog("饮料颜色") }}
2、CocaCola
类
import UIKitclass CocaCola: Drinks { override func drinksColor(){ NSLog("可口可乐是褐色") }}
3、Fender
类
import UIKitclass Fender: Drinks { override func drinksColor(){ NSLog("芬达是橙色") }}
4、MineralWater
类
import UIKitclass MineralWater: Drinks { override func drinksColor(){ NSLog("矿泉水是透明色") }}
5、DrinksFactory
类
import UIKitenum DrinkType:Int { case DrinkCocaCola = 0 //可口可乐 case DrinkFender = 1 //芬达 case DrinkMineralWater = 3 //矿泉水}class DrinksFactory: NSObject { func createDrinksWithType(drinkstype:DrinkType) -> Drinks { switch drinkstype { case .DrinkCocaCola:do { let color = CocaCola() return color; } case .DrinkFender:do{ let fender = Fender() return fender; } case .DrinkMineralWater:do{ let mineralWater = MineralWater() return mineralWater; } } }}
当我们在需要生产的时候我们调用方法为
import UIKitclass ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. view.backgroundColor = UIColor.red let cocaCola:Drinks = DrinksFactory().createDrinksWithType(drinkstype: DrinkType.DrinkCocaCola) print(cocaCola .drinksColor()) //可口可乐是褐色 let fender:Drinks = DrinksFactory().createDrinksWithType(drinkstype: DrinkType.DrinkFender) print(fender .drinksColor()) //芬达是橙色 let mineralWater:Drinks = DrinksFactory().createDrinksWithType(drinkstype: DrinkType.DrinkMineralWater) print(mineralWater .drinksColor()) //矿泉水是透明色 }}
这样我们就简单实现了一个工厂方法,通过一个工厂类来管理所有饮料的生产,而且我们在需要多生产一种类型的饮料的时候,只要要创立此饮料的类,而后在工厂方法中实现就OK了。
我在这里只是抛砖引玉,只是在讲解模式,这里面我们还有好多可以扩展的,比方不同的饮料有不同的口味,配方等等,共有的属性我们可以写在父类来实现,但是每个子类也可以有自己特有的属性。
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » ios设计模式之简单工厂模式
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » ios设计模式之简单工厂模式