澳门银河娱乐官方网站 >澳门银河在线

iOS设计模式之美-抽象工厂模式

2017-12-28 10:05 编辑: yyuuzhu 分类:澳门银河在线 来源:KeepMoveingOn

iOS设计模式之美-工厂模式

iOS设计模式之美-抽象工厂模式

1.何为抽象工厂模式

抽象工厂模式为工厂模式的更细化区分。抽象工厂模式提供一个创建一系列相关或者相互依赖的对象接口,而无需指定它们的具体类。从上一篇文章iOS设计模式之美-工厂模式我们可知,工厂模式每种不同的产品都由不同的工厂负责生产。而抽象工厂模式则是一种工厂生产一系列相关的产品(产品族)

产品族:以产品平台为基础,通过添加不同的个性模块,以满足不同客户个性化需求的一组相关产品。

2.何时使用抽象工厂模式

  • 批量调整一系列具有相同行为对象

例如:

1.png

麦当劳同时提供了两种不同风味的优惠套餐供客户选择。满足于同时想吃汉堡、派和喝饮料的客户。长期选择A套餐的客户可能在某天想换换口味,这时他就会去尝试另外一种B套餐。尽管套餐变了,但是对于客户的基础要求仍旧可以满足(汉堡、派、饮料)。在基础需求上又为不同客户提供了更加个性化的选择正是抽象工厂模式的强大之处。

3.抽象工厂模式静态类结构图

1.jpg

UML.png

4.案例

简单的贴下上述套餐选择的代码(以A套餐为例,B套餐代码同理):

WCQFactory.h

#import 
@class WCQHamburger, WCQPie, WCQDrink;
@interface WCQFactory : NSObject
- (WCQHamburger *)hamburger;
- (WCQPie *)pie;
- (WCQDrink *)drink;
@end

WCQFactory.m

#import "WCQFactory.h"
@implementation WCQFactory
- (WCQHamburger *)hamburger {
    
    return nil;
}
- (WCQPie *)pie {
    
    return nil;
}
- (WCQDrink *)drink {
    
    return nil;
}
@end

WCQAFactory.m

#import "WCQAFactory.h"
#import "WCQCheeseHambueger.h"
#import "WCQCocaDrink.h"
#import "WCQApplePie.h"
@implementation WCQAFactory
- (WCQHamburger *)hamburger {
    
    return [[WCQCheeseHambueger alloc] init];
}
- (WCQPie *)pie {
    
    return [[WCQApplePie alloc] init];
}
- (WCQDrink *)drink {
    
    return [[WCQCocaDrink alloc] init];
}
@end

WCQPie.h

#import 
@interface WCQPie : NSObject
- (void)beEaten;
@end
WCQPie.m
#import "WCQPie.h"
@implementation WCQPie
- (void)beEaten {
    
}
@end
WCQApplePie.m
#import "WCQApplePie.h"
@implementation WCQApplePie
- (void)beEaten {
    
    NSLog(@"%s", __FUNCTION__);
}
@end

汉堡与饮料的代码与派同理这里也不贴了...

调用方式:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    WCQFactory *factory = [[WCQAFactory alloc] init];
    WCQHamburger *hamburger = [factory hamburger];
    WCQPie *pie = [factory pie];
    WCQDrink *drink = [factory drink];
    
    [hamburger beEaten];
    [pie beEaten];
    [drink beDrink];
}

此时如果我需要替换成B套餐则只需要将WCQAFactory替换成WCQBFactory的具体工厂类即可,而无需调整其他客户端逻辑

5.工厂模式与抽象工厂的区别

1.png

以上为本人个人理解与分享,如有错误欢迎指出

12.jpeg

  • 作者:KeepMoveingOn

  • 链接:https://www.jianshu.com/p/6f0e45e87381

搜索CocoaChina微信公众号:CocoaChina
微信扫一扫
订阅每日移动开发及APP推广热点资讯
公众号:
CocoaChina
我要投稿   收藏文章
上一篇:EFResume 一个普通的 Swift 简历模板
我来说两句
发表评论
您还没有登录!请登录注册
所有评论(0

综合评论

相关帖子

sina weixin mail 回到顶部