工厂方法模式

作者: FY_Chao | 来源:发表于2018-09-20 14:04 被阅读12次

    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来实现。增加了项目的复杂度。

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

    • 抽象父类(Product):是工厂方法模式所创建对象的超类,即对象的共同父类(NSNumber)。
    • 具体子类(ConcreteProduct): 具体子类实现了抽象父类的接口,子类的对象一般与具体工厂的方法一一对应。
    • 抽象工厂(Creator): 抽象工厂中声明了工厂方法,用于具体工厂实现,返回一个实例。
    • 具体工厂(ConcreteCreator): 具体工厂中实现了抽象工厂中定义的工厂方法,返回具体类的实例。
    1. NSNumber的类工厂方法属于工厂方法的变体,苹果用Category方式向开发者隐藏了具体子类实现的细节。这些类工厂方法,只是NSNumber提供用于生成对象的便捷方法,并不是用来子类重写的。

    WHEN工厂方法模式:

    • 在编译期的时候无法准确的确定要创建哪个类的对象。
    • 开发者想要在运行时由子类来创建对象。
    • 我们不需要知道也不关心具体类的类名(如:NSCFBoolean),只要知道所对应的工厂方法(如:numberWithBool:)就能通过其子类来指定创建哪个对象。

    相关文章

      网友评论

        本文标题:工厂方法模式

        本文链接:https://www.haomeiwen.com/subject/wwlwnftx.html