抽象工厂的灵活性要比简单工程的灵活性强。
抽象工厂的UML图(第一次画UML图,可能关系和箭头的图意义有错误,但是请不要以建模规范去看图,以最基本的结合后面OC代码,理解相关关系):
1 #import <Foundation/Foundation.h> 2 #import "BaseFactory.h" 3 #import "AppleFactory.h" 4 #import "GoogleFactory.h" 5 6 在抽象工厂类中为什么需要枚举列举工厂类,因为需要用户指定工厂, 7 然后让工厂来生产具体产品 8 typedef enum : NSUInteger { 9 10 kApple = 0x11, 11 kGoogle, 12 13 } EFactoryType; 14 15 @interface FactoryManager : NSObject 16 17 /** 18 * 获取工厂 19 * 20 * @param factoryType 工厂类型 21 * 22 * @return 创建出的工厂 23 */ 24 + (BaseFactory *)factoryWithBrand:(EFactoryType)factoryType; 25 26 @end
1 #import "FactoryManager.h" 2 3 @implementation FactoryManager 4 5 + (BaseFactory *)factoryWithBrand:(EFactoryType)factoryType { 6 7 BaseFactory *factory = nil; 8 9 if (factoryType == kApple) { 10 11 factory = [[AppleFactory alloc] init]; 12 13 } else if (factoryType == kGoogle) { 14 15 factory = [[GoogleFactory alloc] init]; 16 } 17 18 return factory; 19 } 20 21 @end
1 #import <Foundation/Foundation.h> 2 #import "BasePhone.h" 3 #import "BaseWatch.h" 4 5 @interface BaseFactory : NSObject 6 7 /** 8 * 创建手机 9 * 10 * @return 手机 11 */ 12 - (BasePhone *)createPhone; 13 14 /** 15 * 创建手表 16 * 17 * @return 手表 18 */ 19 - (BaseWatch *)createWatch; 20 21 @end
1 #import "BaseFactory.h" 2 3 @implementation BaseFactory 4 5 - (BasePhone *)createPhone { 6 7 return nil; 8 } 9 10 - (BaseWatch *)createWatch { 11 12 return nil; 13 } 14 15 @end
1 #import "iWatch.h" 2 3 @implementation iWatch 4 5 @end
1 #import "BaseWatch.h" 2 3 @interface AndroidWatch : BaseWatch 4 5 @end 6 7 #import "AndroidWatch.h" 8 9 @implementation AndroidWatch 10 11 @end
1 #import "ViewController.h" 2 #import "FactoryManager.h" 3 4 @interface ViewController () 5 6 @end 7 8 @implementation ViewController 9 10 - (void)viewDidLoad { 11 12 [super viewDidLoad]; 13 14 // 获取工厂 15 BaseFactory *factory = [FactoryManager factoryWithBrand:kGoogle]; 16 17 // 创建商品 18 BasePhone *phone = [factory createPhone]; 19 BaseWatch *watch = [factory createWatch]; 20 21 NSLog(@"%@ %@", phone, watch); 22 } 23 24 @end
原文:http://www.cnblogs.com/goodboy-heyang/p/4919161.html