iOS 工厂模式(抽象工厂)
2017-03-07 本文已影响92人
印林泉
抽象工厂管理类
//
// FactoryManager.h
// LearnAbstractFactory
//
// Created by 印林泉 on 2017/3/6.
// Copyright © 2017年 ylq. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "BaseFactory.h"
#import "AppleFactory.h"
#import "GoogleFactory.h"
typedef enum : NSUInteger {
kApple,
kGoogle,
} EFactoryType;
@interface FactoryManager : NSObject
///获取工厂
+ (BaseFactory *)factoryWithBrand:(EFactoryType)factoryType;
@end
//
// FactoryManager.m
// LearnAbstractFactory
//
// Created by 印林泉 on 2017/3/6.
// Copyright © 2017年 ylq. All rights reserved.
//
#import "FactoryManager.h"
@implementation FactoryManager
+ (BaseFactory *)factoryWithBrand:(EFactoryType)factoryType {
BaseFactory *factory = nil;
if (factoryType == kApple) {
factory = [[AppleFactory alloc] init];
}
else if (factoryType == kGoogle) {
factory = [[GoogleFactory alloc] init];
}
return factory;
}
@end
抽象工厂类
//
// BaseFactory.h
// LearnAbstractFactory
//
// Created by 印林泉 on 2017/3/6.
// Copyright © 2017年 ylq. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "BasePhone.h"
#import "BaseWatch.h"
@interface BaseFactory : NSObject
///创建手机
- (BasePhone *)createPhone;
///创建手表
- (BaseWatch *)createWatch;
@end
//
// BaseFactory.m
// LearnAbstractFactory
//
// Created by 印林泉 on 2017/3/6.
// Copyright © 2017年 ylq. All rights reserved.
//
#import "BaseFactory.h"
@implementation BaseFactory
- (BasePhone *)createPhone {
return nil;///真实开发中需要使其崩溃
}
- (BaseWatch *)createWatch {
return nil;
}
@end
苹果工厂
//
// AppleFactory.h
// LearnAbstractFactory
//
// Created by 印林泉 on 2017/3/6.
// Copyright © 2017年 ylq. All rights reserved.
//
#import "BaseFactory.h"
@interface AppleFactory : BaseFactory
@end
//
// AppleFactory.m
// LearnAbstractFactory
//
// Created by 印林泉 on 2017/3/6.
// Copyright © 2017年 ylq. All rights reserved.
//
#import "AppleFactory.h"
#import "iPhone.h"
#import "iWatch.h"
@implementation AppleFactory
- (BasePhone *)createPhone {
return [[iPhone alloc] init];
}
- (BaseWatch *)createWatch {
return [[iWatch alloc] init];
}
@end
谷歌工厂
//
// GoogleFactory.h
// LearnAbstractFactory
//
// Created by 印林泉 on 2017/3/6.
// Copyright © 2017年 ylq. All rights reserved.
//
#import "BaseFactory.h"
@interface GoogleFactory : BaseFactory
@end
//
// GoogleFactory.m
// LearnAbstractFactory
//
// Created by 印林泉 on 2017/3/6.
// Copyright © 2017年 ylq. All rights reserved.
//
#import "GoogleFactory.h"
#import "AndroidPhone.h"
#import "AndroidWatch.h"
@implementation GoogleFactory
- (BasePhone *)createPhone {
return [[AndroidPhone alloc] init];
}
- (BaseWatch *)createWatch {
return [[AndroidWatch alloc] init];
}
@end
手机基类
//
// BasePhone.h
// LearnAbstractFactory
//
// Created by 印林泉 on 2017/3/6.
// Copyright © 2017年 ylq. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface BasePhone : NSObject
@end
//
// BasePhone.m
// LearnAbstractFactory
//
// Created by 印林泉 on 2017/3/6.
// Copyright © 2017年 ylq. All rights reserved.
//
#import "BasePhone.h"
@implementation BasePhone
@end
苹果手机
//
// iPhone.h
// LearnAbstractFactory
//
// Created by 印林泉 on 2017/3/6.
// Copyright © 2017年 ylq. All rights reserved.
//
#import "BasePhone.h"
@interface iPhone : BasePhone
@end
//
// iPhone.m
// LearnAbstractFactory
//
// Created by 印林泉 on 2017/3/6.
// Copyright © 2017年 ylq. All rights reserved.
//
#import "iPhone.h"
@implementation iPhone
@end
安卓手机
//
// AndroidPhone.h
// LearnAbstractFactory
//
// Created by 印林泉 on 2017/3/6.
// Copyright © 2017年 ylq. All rights reserved.
//
#import "BasePhone.h"
@interface AndroidPhone : BasePhone
@end
//
// AndroidPhone.m
// LearnAbstractFactory
//
// Created by 印林泉 on 2017/3/6.
// Copyright © 2017年 ylq. All rights reserved.
//
#import "AndroidPhone.h"
@implementation AndroidPhone
@end
手表基类
//
// BaseWatch.h
// LearnAbstractFactory
//
// Created by 印林泉 on 2017/3/6.
// Copyright © 2017年 ylq. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface BaseWatch : NSObject
@end
//
// BaseWatch.m
// LearnAbstractFactory
//
// Created by 印林泉 on 2017/3/6.
// Copyright © 2017年 ylq. All rights reserved.
//
#import "BaseWatch.h"
@implementation BaseWatch
@end
苹果手表
//
// iWatch.h
// LearnAbstractFactory
//
// Created by 印林泉 on 2017/3/6.
// Copyright © 2017年 ylq. All rights reserved.
//
#import "BaseWatch.h"
@interface iWatch : BaseWatch
@end
//
// iWatch.m
// LearnAbstractFactory
//
// Created by 印林泉 on 2017/3/6.
// Copyright © 2017年 ylq. All rights reserved.
//
#import "iWatch.h"
@implementation iWatch
@end
//
// AndroidWatch.h
// LearnAbstractFactory
//
// Created by 印林泉 on 2017/3/6.
// Copyright © 2017年 ylq. All rights reserved.
//
#import "BaseWatch.h"
@interface AndroidWatch : BaseWatch
@end
安卓手表
//
// AndroidWatch.m
// LearnAbstractFactory
//
// Created by 印林泉 on 2017/3/6.
// Copyright © 2017年 ylq. All rights reserved.
//
#import "AndroidWatch.h"
@implementation AndroidWatch
@end
使用
//
// ViewController.m
// LearnAbstractFactory
//
// Created by 印林泉 on 2017/3/6.
// Copyright © 2017年 ylq. All rights reserved.
//
#import "ViewController.h"
#import "FactoryManager.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
///获取工厂
BaseFactory *factory = [FactoryManager factoryWithBrand:kApple];
///创建商品
BasePhone *phone = [factory createPhone];
BaseWatch *watch = [factory createWatch];
NSLog(@"%@ %@", phone, watch);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end