简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
简单工厂模式包含着以下三个角色
Factory:工厂角色
工厂角色负责实现创建所有实例的内部逻辑
Product:抽象产品角色
抽象产品角色是所创建的所有对象的父类,负责描述所有实例所共有的公共接口
ConcreteProduct:具体产品角色
具体产品角色是创建目标,所有创建的对象都充当这个角色的某个具体类的实例。
举个例子.比方说我们有一个Person类.
我们通过这个Person类来”创建”一个人.
@interface Person : NSObject
@end
@implementation Person
@end
@interface Male : Person
@end
@implementation Male
@end
@interface Female : Person
@end
@implementation Female
@end
比如我们想快速创建男人,女人.那么,我们会添加一个Gender的属性
typedef NS_ENUM(NSUInteger, PersonGender) {
PersonGenderMale,
PersonGenderFemale,
};
@interface Person : NSObject
///性别
@property (nonatomic ,strong) NSString *gender;
+ (instancetype)creatWithGender:(PersonGender)gender;
- (void)initWithGender:(PersonGender)gender;
@end
这样创建的好处是,我们不用管类的内部在创建男女对象的时候是如何处理的.只需要在创建的时候传入男人或者是女人.就能得到相应的男人或者是女人对象.在快速创建对象的时候十分有效.
现在我们假设出现了一个新的性别.那么就需要去这个创建方法里面做相应的逻辑修改.一个两个需求可能还比较好.但是当这个类越来越大的时候.这个简单工厂模式就突出了他的坑爹的地方了扩展困难,一旦添加新"产品"就不得不修改工厂逻辑,在"产品"类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。
简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
也就是说简单工厂模式是由同一个父类管理的创建不同子类的一种设计模式.通过从父类的创建方法里面传入必须的参数来判断创建什么子类(这样拓展之后父类的判断逻辑就会增大).