iOS设计模式解析

工厂方法模式

2018-09-20  本文已影响12人  FY_Chao

WHAT工厂方法模式:

工厂方法模式:在工厂父类中定义创建对象的公共接口,而子类则负责生成具体的对象。这样做的目的是将类的实例化操作延迟到子类中完成,即通过子类来确定究竟应该实例化哪一个类。Objective-C中的最出名的工厂方法模式莫过于NSNumberCategory中的类工厂方法。

@interface NSNumber (NSNumberCreation)
+ (NSNumber *)numberWithChar:(char)value;
+ (NSNumber *)numberWithUnsignedChar:(unsigned char)value;
+ (NSNumber *)numberWithShort:(short)value;
+ (NSNumber *)numberWithUnsignedShort:(unsigned short)value;
+ (NSNumber *)numberWithInt:(int)value;
+ (NSNumber *)numberWithUnsignedInt:(unsigned int)value;
+ (NSNumber *)numberWithLong:(long)value;
+ (NSNumber *)numberWithUnsignedLong:(unsigned long)value;
+ (NSNumber *)numberWithLongLong:(long long)value;
+ (NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value;
+ (NSNumber *)numberWithFloat:(float)value;
+ (NSNumber *)numberWithDouble:(double)value;
+ (NSNumber *)numberWithBool:(BOOL)value;
+ (NSNumber *)numberWithInteger:(NSInteger)value API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
+ (NSNumber *)numberWithUnsignedInteger:(NSUInteger)value API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
  1. 传统的工厂方法模式如下图:


    Factory Method Pattern

在结合上图,我们可以很清晰的知道何为工厂方法模式:
父类(Product)中定义好创建对象的公共接口,交由子类(Product)实现。
Creator中声明了抽象的工厂方法,每个ConcreteCreator中实现抽象工厂中定义的工厂方法。生成返回一个对应Product的对象。每个工厂对应的生产一种产品。

这种模式的缺陷就在于每多一种产品必须有一个新的ConcreteProduct 和 对应的ConcreteCreator来实现。增加了项目的复杂度。

在工厂方法模式中存在四个的角色:

  1. NSNumber的类工厂方法属于工厂方法的变体,苹果用Category方式向开发者隐藏了具体子类实现的细节。这些类工厂方法,只是NSNumber提供用于生成对象的便捷方法,并不是用来子类重写的。

WHEN工厂方法模式:

上一篇下一篇

猜你喜欢

热点阅读