1. 概念
工厂模式用于创建某个类的子类实例的
要解决的问题:在其他地方,不确定要创建那个具体的子类的时候使用
2. 代码
1.Animal 动物类
#import <Foundation/Foundation.h>
// 动物类:作为父类
@interface Animal : NSObject
- (void)eat;
@end
#import "Animal.h"
@implementation Animal
- (void)eat {
NSLog(@"Animal eating...");
}
@end
2. Dog 狗
#import "Animal.h"
@interface Dog : Animal
- (void)eat;
@end
#import "Dog.h"
@implementation Dog
- (void)eat {
NSLog(@"Dog eating...");
}
@end
3. Cat 猫
#import "Animal.h"
@interface Cat : Animal
- (void)eat;
@end
#import "Cat.h"
@implementation Cat
- (void)eat {
NSLog(@"Cat eating...");
}
@end
4.AnimalFactory 动物工厂
#import <Foundation/Foundation.h>
#import "Animal.h"
@interface AnimalFactory : NSObject
+ (Animal *)createAnimalWithName:(NSString *)name;
@end
#import "AnimalFactory.h"
@implementation AnimalFactory
// 工厂方法
+ (Animal *)createAnimalWithName:(NSString *)className {
Class class = NSClassFromString(className);
Animal *animal = [[class alloc] init];
return animal;
}
@end
5. ViewController
#import "AnimalFactory.h"
#import "Animal.h"
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
Animal *animal = [AnimalFactory createAnimalWithName:@"Dog"];
[animal eat]; // 打印 Dog eating...
}
@end