iOS设计模式-------《工厂模式》

1 何为工厂模式?
工厂方法也称为虚构造器。它适用于一个类无法预期需要生成那个类的对象,想让子类来指定所生成的对象。
这里写图片描述

     抽象的Product(产品)定义了工厂方法创建的对象的接中。ConcreteProduct实现了Product的接口。Create定义了返回Product对象的工厂方法。它也可以为工厂方法定义一个默认实现,返回默认ConcreateProduct对象。Creator的其他操作可以调用此工厂方法创建Product对象。ConcreateCreator是Creator的子类。他重载了工厂方法,已返回ConcreteProduct的实例  选自《iOS设计模式 51页》

个人理解就是:父类定义一个创建对象的接口,让子类去决定实例化那个一个类,把对象的实例化延迟到了子类,感觉也就是和多态差不多的。

2 何时使用工厂方法?
编译时无法准确预期要创建的对象的类。
类想让其子类决定的运行时创建什么
类有若干辅助类为其子类,而你想将返回那个子类这一信息局部化

现在有点雨里雾里的,只能用例子来拨开迷雾了。这里借用别人的一个例子。不过最好自己写一写,这样更明白。

@iOS中工厂方法的简单实现举个例子,有一家生产衣服的工厂,它生产2种型号的衣服,一个为DOTA类,一个为LOL类,经销商需要进什么类型的货一定要显示的告诉工厂,生产指定的类型,这样很麻烦,后来它有钱了,开了两家工厂,一家单独生产DOTA类,一家单独生产LOL类,这样,经销商进货直接去找对应的工厂就行.

衣服的父类

HMTClothes.h
@interface HMTClothes : NSObject
- (void)showClothesType;
@end
HMTClothes.m
@implementation HMTClothes
- (void)showClothesType{
}
@end

DOTA衣服类继承与衣服类

HMTClothes_Dota.h
@interface HMTClothes_Dota : HMTClothes
- (void)showClothesType;
@end
HMTClothes_Dota.m
@implementation HMTClothes_Dota

- (void)showClothesType{
    NSLog(@"这衣服的类型是Dota");
}
@end

LOL类必须继承与同一个父类

HMTClothes_LOL.h
@interface HMTClothes_LOL : HMTClothes

- (void)showClothesType;
@end
@implementation HMTClothes_LOL

- (void)showClothesType{
    NSLog(@"这件衣服的类型是LOL");
}

@end

工厂类,通过这个类决定是Dota衣服的工厂类还是LOL衣服的类

HMTClothesFactory.h
@class HMTClothes;

@interface HMTClothesFactory : NSObject

- (HMTClothes *)makeClothes;
@end
@implementation HMTClothesFactory

- (HMTClothes *)makeClothes{

    return nil;
}

@end

HMTClothesDotaFactory Dota类,通过这类返回相对应的衣服类

HMTClothesDotaFactory.h
@interface HMTClothesDotaFactory : HMTClothesFactory
- (HMTClothes *)makeClothes;
@end
@implementation HMTClothesDotaFactory

- (HMTClothes *)makeClothes{

    return [[HMTClothes_Dota alloc]init];
}

@end
HMTClothesLoLFactory.h
@interface HMTClothesLoLFactory : HMTClothesFactory

- (HMTClothes *)makeClothes;

@end
@implementation HMTClothesLoLFactory

- (HMTClothes *)makeClothes{
  return [[HMTClothes_LOL alloc]init];
}

@end

VC中:

- (void)viewDidLoad {
    [super viewDidLoad];
    HMTClothesFactory *colthesFacory = [[HMTClothesDotaFactory alloc]init];
    //返回的是HMTClothesDotaFactory的对象,因为OC是运行时语言,它只有运行时才去决定哪个类。也就是多态。
    HMTClothes *clotehs = [colthesFacory makeClothes];
    [clotehs showClothesType];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值