简单工厂模式
2018-06-23 本文已影响4人
Colin_狂奔的蚂蚁
简单工厂模式
简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
简单工厂模式的UML类图
简单工厂模式的UML类图.png1、Apple、Orange、Banana类继承Fruits类;
2、FruitsFactory工厂类依赖Apple、Orange、Banana类;
实现代码如下:
FruitsFactory文件
#import <Foundation/Foundation.h>
#import "Fruits.h"
#import "Apple.h"
#import "Orange.h"
#import "Banana.h"
// 由于外面要传一个类型进来,所以要加一个枚举才行
typedef NS_ENUM(NSInteger) {
kApple,
kOrange,
kBanana
} FruitsType;
@interface FruitsFactory : NSObject
// 创造水果的工厂
+(Fruits *)fruitsFactory:(FruitsType)type;
@end
#import "FruitsFactory.h"
@implementation FruitsFactory
- (Fruits *)fruitsFactory:(FruitsType)type {
// 创建空的对象.在工厂方法里面进行水果的制造
Fruits *fruits = nil;
switch (type) {
case kApple:
fruits = [[Apple alloc] init];
break;
case kOrange:
fruits = [[Orange alloc] init];
break;
case kBanana:
fruits = [[Banana alloc] init];
default:
break;
}
return fruits;
}
@end
Fruits文件
#import <Foundation/Foundation.h>
@interface Fruits : NSObject
- (void)sweet; /**< 甜 */
- (void)poorTaste; /**< 不好吃 */
@end
#import "Fruits.h"
@implementation Fruits
- (void)sweet {}
- (void)poorTaste {}
@end
Apple文件
#import "Fruits.h"
@interface Apple : Fruits
- (void)freshApple; /**< 新鲜的苹果 */ // 开闭原则
@end
#import "Apple.h"
@implementation Apple
// 甜
- (void)sweet {
NSLog(@"Apple 非常甜");
}
// 不好吃
- (void)poorTaste {
NSLog(@"Apple 不好吃");
}
// 新鲜的苹果
- (void)freshApple {
NSLog(@"Apple 新鲜的苹果");
}
@end
Orange文件
#import "Fruits.h"
@interface Orange : Fruits
- (void)acidOrange; /**< 酸橘子 */
@end
#import "Orange.h"
@implementation Orange
// 甜
- (void)sweet {
NSLog(@"Orange 非常甜");
}
// 不好吃
- (void)poorTaste {
NSLog(@"Orange 不好吃");
}
/**< 酸橘子 */
- (void)acidOrange {
NSLog(@"Orange 有点酸");
}
@end
Banana文件
#import "Fruits.h"
@interface Banana : Fruits
@end
#import "Banana.h"
@implementation Banana
// 甜
- (void)sweet {
NSLog(@"Banana 非常甜");
}
// 不好吃
- (void)poorTaste {
NSLog(@"Banana 不好吃");
}
@end