你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> IOS設計模式之工場模式

IOS設計模式之工場模式

編輯:IOS開發綜合

IOS設計模式之工場模式


1 何為工廠模式:

在基類中定義創建對象的一個接口,讓子類決定實列化那個類.工廠方法讓一個類的實列化延遲到子類進行.工廠方法解決的問題是

對象的創建時機,它提供了一種擴展的策略,很好的符合了開放封閉原則.

 

2 工廠模式的設計:

將工廠和產品都抽象出一個基類,在基類中定義統一的接口,然後再具體的工廠同創建具體的產品.

 

3 工廠方法模式的結構圖如下(摘自Object-C設計模式一書)

\




4 為何這是創建對象的安全方法(摘自Object-C設計模式一書)

與直接創建新的具體對象相比,使用工廠方法創建對象可算一種最佳做法.工廠方法模式讓客戶程序可以要求由工廠方法創建的

對象擁有一組共同的行為.所以往類層次結構中注入新的具體產品並不需要修改客戶端代碼,因為返回的任何具體對象的接口都跟客戶

端一致再用的從前的接口相同.

 

下面以程序來展示工廠模式:

/********************/
BreedOfDogProtocol.h

//定義狗的品種的方法

@protocol BreedOfDogProtocol

-(NSString *) getBreed;//得到狗的品種的公共方法

@end

/********************/

BreedOfDog.h

 

@interface BreedOfDog :NSObject

@property NSString *_breed;

@end

 

BreedOfDog.m

 

@implementation BreedOfDog

-(NSString *) getBreed{

return 0;

}

@end

/********************/

BorderCollie.h

 

//邊境牧羊犬

@interface BorderCollie : BreedOfDog

@end

 

BorderCollie.m

 

@implementation BorderCollie

 

-(NSString *) getBreed{

return@BorderCollie;

}

@end

/********************/

JiWawa.h

 

//吉娃娃

@interface JiWawa : BreedOfDog

@end

 

JiWawa.m

 

@implementation JiWawa

 

-(NSString *)getBreed{

return@jiWawa;

}

@end

/********************/

定義工廠方法 BreedOfDogFactory.h

@interface BreedOfDogFactory :NSObject

-(BreedOfDog *) getDifferentBreedOfDog;

@end

 

BreedOfDogFactory.m

 

@implementation BreedOfDogFactory

-(BreedOfDog *) getDifferentBreedOfDog{

return nil;

 

}

@end

/********************/

BorderCollieFactory.h

 

@interface BorderCollieFactory :BreedOfDogFactory

@end

 

BorderCollieFactory.m

@implementation BorderCollieFactory

-(BreedOfDog *) getDifferentBreedOfDog{

return [[BorderColliealloc] init];

 

}

@end

/********************/

JiWawaFactory.h

 

@interface JiWawaFactory : BreedOfDogFactory

@end

 

JiWawaFactory.m

 

@implementation JiWawaFactory

-(BreedOfDog *)getDifferentBreedOfDog{

 

return [[JiWawaalloc] init];

}

@end

/********************/

main.m

 

 

int main(int argc,const char * argv[]) {

 

BreedOfDogFactory *breedFactory = [[BorderCollieFactoryalloc] init];

BorderCollie * borderCollie = [breedFactory getDifferentBreedOfDog];

NSLog(@%@,[borderColliegetBreed]);

return 0;

}


5 也許在使用工廠模式的時候你會想到NSNumber類,他的設計思想和工廠模式差不多

NSNumber子類圖

 

\

 

 

創建一個NSNumber對象有以下方法:

  • + numberWithBool:
  • + numberWithChar:
  • + numberWithDouble:
  • + numberWithFloat:
  • + numberWithInt:
  • + numberWithInteger:
  • + numberWithLong:
  • + numberWithLongLong:
  • + numberWithShort:
  • + numberWithUnsignedChar:
  • + numberWithUnsignedInt:
  • + numberWithUnsignedInteger:
  • + numberWithUnsignedLong:
  • + numberWithUnsignedLongLong:
  • + numberWithUnsignedShort:

     

     

    6 為什麼使用NSNumber類?在基礎類已經完善的情況下?

     

    例如:

    NSInteger是基礎類,但是NSNumber是一個類,如果想要存儲一個數值,直接用NSInteger時不行得,比如在Array中.

     

    NSArray *array = [[NSArray alloc] init];

    [array addObject :3]; //會造成編譯錯誤,因為NSArray裡面存儲的是一個類,二不能直接存儲一個數值.

     

    NSArray *array = [[array alloc] init];

    [array addObject :[NSNumber numberWithInt : 3]];//不會造成編譯錯誤,因為NSNumber生成的是一個對象.

     

    Cocoa提供了NSNumber來包裝(ji以對象的形式實現)基本數據類型.




     
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved