博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS设计模式解析(二)抽象工厂方法
阅读量:7097 次
发布时间:2019-06-28

本文共 1700 字,大约阅读时间需要 5 分钟。

  • 抽象工厂方法:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
  • 与工厂方法区别
    •   抽象工厂通过对象组合创建抽象产品、工厂通过类集成创建抽象产品
    •   抽象工厂创建多系列产品、工厂创建一种产品(例如上篇都属于鞋)
    •       抽象工厂修改父类的接口才能支持新产品、工厂子类化并重写工厂方法创建新产品
  • 例如      :Button类有两个子类ButtonA、ButtonB,我们通过对Button提供一个抽象工厂方法来产生不同的button子类:  
  • 代码实现
    1 #import "button.h" 2 #import "buttonA.h" 3 #import "buttonB.h" 4 @implementation button 5 +(instancetype)initWithType:(ButtonType)type 6 { 7     switch (type) { 8         case ButtonTypeA: 9             return [[buttonA alloc]init];10             break;11         case ButtonTypeB:12             return [[buttonB alloc]init];13             break;14         default:15             break;16     }17 }18 19 -(NSString *)name{20     return nil;21 }22 @end
    button
    1 #import "buttonB.h"2 3 @implementation buttonB4 -(NSString *)name{5     return @"B";6 }7 @end
    buttonB
    1 #import "buttonA.h"2 3 @implementation buttonA4 -(NSString *)name{5     return @"A";6 }7 @end
    buttonA
    1 #import "ViewController.h" 2 #import "button.h" 3 #import "buttonA.h" 4 #import "buttonB.h" 5 @interface ViewController () 6  7 @end 8  9 @implementation ViewController10 11 - (void)viewDidLoad {12     [super viewDidLoad];13 14     buttonA * buttonA = [button initWithType:ButtonTypeA];15     NSLog(@"%@",buttonA.name);16     17     buttonB * buttonB = [button initWithType:ButtonTypeB];18     NSLog(@"%@",buttonB.name);19     20           21     22 }23 24 - (void)didReceiveMemoryWarning {25     [super didReceiveMemoryWarning];26 }27 28 @end
    ViewController
  • 打印结果

    2016-05-09 16:16:43.062 Factory[2671:193558] A

    2016-05-09 16:16:43.063 Factory[2671:193558] B

  • 总结:其实工厂方法就是生产一种固定产品(比如鞋子,可以继续扩展成AD、PUMA等等)。而且抽象工厂就是生产不同类产品的全部产品(可以随便添加产品族,比如扩展一个衣服类等等)

     

转载于:https://www.cnblogs.com/conorBlogs/p/5474367.html

你可能感兴趣的文章
在 Cocos2d-x 中使用 OpenSSL
查看>>
Python 进阶_OOP 面向对象编程_self 的实例绑定
查看>>
JAVA在win10上的安装环境配置
查看>>
闵春榕:PCIE SSD在数据库优化中的应用
查看>>
Easystack陈喜伦:OpenStack市场走强,聚集效应加剧
查看>>
《社交网站界面设计(原书第2版)》——2.5 严格 VS. 灵活的分类法
查看>>
数据仓库需要的不是退出历史舞台
查看>>
VMware表示,用户在尝试OpenStack之后纷纷决定放弃
查看>>
互联网金融促银行改革比拼大数据管理软实力
查看>>
牵手重庆达成多项合作 ARM持续完善产业布局
查看>>
浪潮与SUSE达成战略合作,共同推进开放云图生态
查看>>
山石网科FWaaS领跑云数据中心防护之道
查看>>
阿里CEO张勇:安全是中国互联网生态的共同基石
查看>>
技术解析:IBM Connections功能扩展
查看>>
开源:好处与风险并存
查看>>
新版飞康CDP、NSS全新功能完全解读
查看>>
两大数据库安全产品比拼:IBM Guardium VS Imperva SecureSpher
查看>>
移动支付市场爆发 告别实体钱包时代有望?
查看>>
Kali如今用云GPU破解口令了
查看>>
亿点连接荣获“2017最佳创新出境产品奖”
查看>>