iOS设计模式解析(二)抽象工厂方法

  • 抽象工厂方法:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
  • 与工厂方法区别
    •   抽象工厂通过对象组合创建抽象产品、工厂通过类集成创建抽象产品
    •   抽象工厂创建多系列产品、工厂创建一种产品(例如上篇都属于鞋)
    •       抽象工厂修改父类的接口才能支持新产品、工厂子类化并重写工厂方法创建新产品
  • 例如      :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 buttonB
    4 -(NSString *)name{
    5     return @"B";
    6 }
    7 @end
    buttonB
    1 #import "buttonA.h"
    2 
    3 @implementation buttonA
    4 -(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 ViewController
    10 
    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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值