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

时间:2023-03-08 23:52:47
iOS设计模式解析(二)抽象工厂方法
  • 抽象工厂方法:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
  • 与工厂方法区别:
    •   抽象工厂通过对象组合创建抽象产品、工厂通过类集成创建抽象产品
    •   抽象工厂创建多系列产品、工厂创建一种产品(例如上篇都属于鞋)
    • 抽象工厂修改父类的接口才能支持新产品、工厂子类化并重写工厂方法创建新产品
  • 例如      :Button类有两个子类ButtonA、ButtonB,我们通过对Button提供一个抽象工厂方法来产生不同的button子类:  
  • 代码实现:
     #import "button.h"
    #import "buttonA.h"
    #import "buttonB.h"
    @implementation button
    +(instancetype)initWithType:(ButtonType)type
    {
    switch (type) {
    case ButtonTypeA:
    return [[buttonA alloc]init];
    break;
    case ButtonTypeB:
    return [[buttonB alloc]init];
    break;
    default:
    break;
    }
    } -(NSString *)name{
    return nil;
    }
    @end

    button

     #import "buttonB.h"
    
     @implementation buttonB
    -(NSString *)name{
    return @"B";
    }
    @end

    buttonB

     #import "buttonA.h"
    
     @implementation buttonA
    -(NSString *)name{
    return @"A";
    }
    @end

    buttonA

     #import "ViewController.h"
    #import "button.h"
    #import "buttonA.h"
    #import "buttonB.h"
    @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {
    [super viewDidLoad]; buttonA * buttonA = [button initWithType:ButtonTypeA];
    NSLog(@"%@",buttonA.name); buttonB * buttonB = [button initWithType:ButtonTypeB];
    NSLog(@"%@",buttonB.name); } - (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    } @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等等)。而且抽象工厂就是生产不同类产品的全部产品(可以随便添加产品族,比如扩展一个衣服类等等)