工厂方法模式

作者: 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:)就能通过其子类来指定创建哪个对象。

相关文章

  • 设计模式-3种工厂模式

    工厂模式包括:简单工厂模式,工厂方法模式,抽象工厂模式 简单工厂模式 工厂方法根据参数直接创建实例:工厂->产品 ...

  • 设计模式-工厂模式

    工厂模式概念 实例化对象,用工厂方法代替new操作。工厂模式包括工厂方法模式和抽象工厂模式。抽象工厂模式是工厂模式...

  • 设计模式-工厂方法模式

    1、工厂方法模式(Factory Method) 工厂方法模式分为三种: 普通工厂模式 多个工厂模式 静态工厂模式...

  • 设计模式 工厂模式

    工厂模式 工厂模式三大类1、简单工厂模式(静态工厂方法模式)2、工厂方法模式3、抽象工厂模式(Kit模式) 简单工...

  • python设计模式 - 工厂模式之工厂方法

    python 环境 工厂方法模式简介 工厂方法模式Factory Method,又称多态性工厂模式。在工厂方法模式...

  • 第一章2.0工厂- 基础类准备

    2.1工厂-简单工厂模式2.2工厂-工厂方法模式2.3工厂-抽象工厂模式

  • 建造模式

    包括:简单工厂、工厂方法、抽象工厂、单例模式、多例模式、建造模式、原始原型模式。 简单工厂:又名静态工厂方法模式,...

  • PHP-浅谈单例模式和工厂模式

    PHP中常用的设计模式有单例模式、工厂模式(简单工厂模式、工厂方法模式和抽象工厂方法模式)、适配模式、策略模式。 ...

  • 设计模式学习--工厂方法模式

    模式定义 工厂方法模式又称工厂模式,也叫虚拟构造器模式或者多态工厂模式,它属于类创建型模式。在工厂方法模式中,工厂...

  • 五分钟精通设计模式(三)之工厂方法模式

    工厂方法模式分为三种: 普通工厂方法模式、多个工厂方法模式、静态工厂方法模式 废话不多说,下面直奔主题,实现步骤:...

网友评论

    本文标题:工厂方法模式

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